safely_cast_index_arrays — SciPy v1.15.2 Manual (original) (raw)
scipy.sparse.
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, returns coords
. For DIA, returns offsets
. 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')