按索引访问 coo_matrix 时出现类型错误
TypeError with accessing to coo_matrix by index
我有 coo_matrix X
和索引 trn_idx
,我想通过它们访问 maxtrix
print (type(X ), X.shape)
print (type(trn_idx), trn_idx.shape)
<class 'scipy.sparse.coo.coo_matrix'> (1503424, 2795253)
<class 'numpy.ndarray'> (1202739,)
这样调用:
X[trn_idx]
TypeError: only integer scalar arrays can be converted to a scalar index
要么这样:
X[trn_idx.astype(int)] #same error
如何通过索引访问?
尝试阅读此内容。
https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.sparse.csr_matrix.todense.html
在通过索引访问之前,您需要转换为密集矩阵。
在稀疏矩阵上尝试 toarray() 方法,然后您可以通过索引访问。
coo_matrix
class 不支持索引。您必须将其转换为不同的稀疏格式。
这是一个小 coo_matrix
的例子:
In [19]: import numpy as np
In [20]: from scipy.sparse import coo_matrix
In [21]: m = coo_matrix([[0, 0, 0, 1], [2, 0, 0 ,0], [0, 0, 0, 0], [0, 3, 4, 0]])
尝试索引 m
失败:
In [22]: m[0,0]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-1f78c188393f> in <module>()
----> 1 m[0,0]
TypeError: 'coo_matrix' object is not subscriptable
In [23]: idx = np.array([2, 3])
In [24]: m[idx]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-a52866a6fec6> in <module>()
----> 1 m[idx]
TypeError: only integer scalar arrays can be converted to a scalar index
如果将 m
转换为 CSR 矩阵,则可以使用 idx
:
对其进行索引
In [25]: m.tocsr()[idx]
Out[25]:
<2x4 sparse matrix of type '<class 'numpy.int64'>'
with 2 stored elements in Compressed Sparse Row format>
如果你要做更多的索引,最好将新数组保存在一个变量中,并在需要时使用它:
In [26]: a = m.tocsr()
In [27]: a[idx]
Out[27]:
<2x4 sparse matrix of type '<class 'numpy.int64'>'
with 2 stored elements in Compressed Sparse Row format>
In [28]: a[0,0]
Out[28]: 0
我有 coo_matrix X
和索引 trn_idx
,我想通过它们访问 maxtrix
print (type(X ), X.shape)
print (type(trn_idx), trn_idx.shape)
<class 'scipy.sparse.coo.coo_matrix'> (1503424, 2795253)
<class 'numpy.ndarray'> (1202739,)
这样调用:
X[trn_idx]
TypeError: only integer scalar arrays can be converted to a scalar index
要么这样:
X[trn_idx.astype(int)] #same error
如何通过索引访问?
尝试阅读此内容。
https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.sparse.csr_matrix.todense.html
在通过索引访问之前,您需要转换为密集矩阵。
在稀疏矩阵上尝试 toarray() 方法,然后您可以通过索引访问。
coo_matrix
class 不支持索引。您必须将其转换为不同的稀疏格式。
这是一个小 coo_matrix
的例子:
In [19]: import numpy as np
In [20]: from scipy.sparse import coo_matrix
In [21]: m = coo_matrix([[0, 0, 0, 1], [2, 0, 0 ,0], [0, 0, 0, 0], [0, 3, 4, 0]])
尝试索引 m
失败:
In [22]: m[0,0]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-22-1f78c188393f> in <module>()
----> 1 m[0,0]
TypeError: 'coo_matrix' object is not subscriptable
In [23]: idx = np.array([2, 3])
In [24]: m[idx]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-a52866a6fec6> in <module>()
----> 1 m[idx]
TypeError: only integer scalar arrays can be converted to a scalar index
如果将 m
转换为 CSR 矩阵,则可以使用 idx
:
In [25]: m.tocsr()[idx]
Out[25]:
<2x4 sparse matrix of type '<class 'numpy.int64'>'
with 2 stored elements in Compressed Sparse Row format>
如果你要做更多的索引,最好将新数组保存在一个变量中,并在需要时使用它:
In [26]: a = m.tocsr()
In [27]: a[idx]
Out[27]:
<2x4 sparse matrix of type '<class 'numpy.int64'>'
with 2 stored elements in Compressed Sparse Row format>
In [28]: a[0,0]
Out[28]: 0