【发布时间】:2015-05-23 23:46:13
【问题描述】:
我正在使用scipy.sparse.csr_matrix 构造一个稀疏向量,如下所示:
csr_matrix((values, (np.zeros(len(indices)), indices)), shape = (1, max_index))
这适用于我的大部分数据,但偶尔我会收到 ValueError: could not convert integer scalar。
这重现了问题:
In [145]: inds
Out[145]:
array([ 827969148, 996833913, 1968345558, 898183169, 1811744124,
2101454109, 133039182, 898183170, 919293479, 133039089])
In [146]: vals
Out[146]:
array([ 1., 1., 1., 1., 1., 2., 1., 1., 1., 1.])
In [147]: max_index
Out[147]:
2337713000
In [143]: csr_matrix((vals, (np.zeros(10), inds)), shape = (1, max_index+1))
...
996 fn = _sparsetools.csr_sum_duplicates
997 M,N = self._swap(self.shape)
--> 998 fn(M, N, self.indptr, self.indices, self.data)
999
1000 self.prune() # nnz may have changed
ValueError: could not convert integer scalar
inds 是 np.int64 数组,vals 是 np.float64 数组。
scipysum_duplicates代码的相关部分是here。
请注意,这是有效的:
In [235]: csr_matrix(([1,1], ([0,0], [1,2])), shape = (1, 2**34))
Out[235]:
<1x17179869184 sparse matrix of type '<type 'numpy.int64'>'
with 2 stored elements in Compressed Sparse Row format>
所以问题不在于维度之一是> 2^31
任何想法为什么这些值会导致问题?
【问题讨论】:
-
请尝试使用
2**31和2**31-1与您发布的相同示例。 -
是的,我发布的示例数据适用于
2**31-1,但不适用于 2**31
标签: python numpy scipy sparse-matrix