scipy.sparse.

safely_cast_index_arrays#

scipy.sparse.safely_cast_index_arrays(A, idx_dtype=<class 'numpy.int32'>, msg='')[源代码]#

安全地将稀疏数组索引转换为 idx_dtype

检查 A 的形状,以确定将其索引数组转换为 dtype idx_dtype 是否安全。如果形状中的任何维度大于 dtype 所能容纳的大小,则强制转换是不安全的,因此会引发 ValueError。如果安全,则将索引数组强制转换为 idx_dtype 并返回结果,而不更改输入 A。如果需要,调用者可以将结果分配给 A 的属性,或直接使用强制转换的索引数组。

除非需要降级转换,否则将返回原始索引数组。您可以测试例如 A.indptr is new_indptr,以查看是否发生了降级转换。

在 1.15.0 版本中添加。

参数:
A稀疏数组或矩阵

应降级转换索引数组的数组。

idx_dtypedtype

所需的 dtype。应为整数 dtype (默认值:np.int32)。大多数 scipy.sparse 使用 int64 或 int32。

msg字符串,可选

如果数组形状太大而无法容纳在 idx_dtype 中,则添加到 ValueError 消息末尾的字符串。错误消息是 f"<index> values too large for {msg}"。它应指示为什么需要降级转换,例如“SuperLU”,默认值为 f“dtype {idx_dtype}”。

返回:
idx_arraysndarray 或 ndarrays 元组

基于 A.format,在强制转换为 idx_dtype 后返回索引数组。对于 CSC/CSR,返回 (indices, indptr)。对于 COO,返回 coords。对于 DIA,返回 offsets。对于 BSR,返回 (indices, indptr)

引发:
ValueError

如果数组的形状无法容纳在新 dtype 中,或者如果稀疏格式不使用索引数组。

示例

>>> 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')