safely_cast_index_arrays#
- scipy.sparse.safely_cast_index_arrays(A, idx_dtype=<class 'numpy.int32'>, msg='')[source]#
Safely cast sparse array indices to idx_dtype.
Check the shape of A to determine if it is safe to cast its index arrays to dtype idx_dtype. If any dimension in shape is larger than fits in the dtype, casting is unsafe so raise
ValueError
. If safe, cast the index arrays to idx_dtype and return the result without changing the input A. The caller can assign results to A attributes if desired or use the recast index arrays directly.Unless downcasting is needed, the original index arrays are returned. You can test e.g.
A.indptr is new_indptr
to see if downcasting occurred.Added in version 1.15.0.
- Parameters:
- Asparse array or matrix
The array for which index arrays should be downcast.
- idx_dtypedtype
Desired dtype. Should be an integer dtype (default:
np.int32
). Most of scipy.sparse uses either int64 or int32.- msgstring, optional
A string to be added to the end of the ValueError message if the array shape is too big to fit in idx_dtype. The error message is
f"<index> values too large for {msg}"
It should indicate why the downcasting is needed, e.g. “SuperLU”, and defaults to f”dtype {idx_dtype}”.
- Returns:
- idx_arraysndarray or tuple of ndarrays
Based on
A.format
, index arrays are returned after casting to idx_dtype. For CSC/CSR, returns(indices, indptr)
. For COO, returnscoords
. For DIA, returnsoffsets
. For BSR, returns(indices, indptr)
.
- Raises:
- ValueError
If the array has shape that would not fit in the new dtype, or if the sparse format does not use index arrays.
Examples
>>> import numpy as np >>> from scipy import sparse >>> data = [3] >>> coords = (np.array([3]), np.array([1])) # Note: int64 arrays >>> A = sparse.coo_array((data, coords)) >>> A.coords[0].dtype dtype('int64')
>>> # rescast after construction, raising exception if shape too big >>> coords = sparse.safely_cast_index_arrays(A, np.int32) >>> A.coords[0] is coords[0] # False if casting is needed False >>> A.coords = coords # set the index dtype of A >>> A.coords[0].dtype dtype('int32')