将numpy数组的值复制到稀疏矩阵的特定位置

时间:2016-05-13 20:06:04

标签: python arrays numpy scipy

所以我试图将一个numpy数组中的值复制到一个稀疏矩阵中。第一个数组如下所示:

results_array = [[  3.00000000e+00   1.00000000e+00   4.00000000e+00   1.00000000e+03]
[  6.00000000e+00   2.00000000e+00   5.00000000e+00   7.00000000e+02]
[  1.60000000e+01   4.00000000e+00   8.00000000e+00   1.00000000e+03]}

第二个值(或results_array[i][1])指示列id,第三个值(results_array[i][2])指示行id,第四个值(results_array[i][3])指示该行的值,列对。

到目前为止,我所拥有的是:

for i in result_array:
sparse_matrix = csc_matrix((i[3],(i[1],i[2])), shape=(14,14))
print "last array", sparse_matrix

我得到的输出是:

File "C:/Users/Andrew/Google Drive/Uni/Final Year/Research Project/Programming/Mine/First UEA/xl_optim/Runestone 2.py", line 13, in <module>
sparse_matrix = csc_matrix((i[3],(i[1],i[2])), shape=(14,14))
File "C:\Users\Andrew\Anaconda2\lib\site-packages\scipy\sparse\compressed.py", line 48, in __init__
other = self.__class__(coo_matrix(arg1, shape=shape))
File "C:\Users\###\Anaconda2\lib\site-packages\scipy\sparse\coo.py", line 182, in __init__
self._check()
File "C:\Users\###\Anaconda2\lib\site-packages\scipy\sparse\coo.py", line 219, in _check
nnz = self.nnz
File "C:\Users\###\Anaconda2\lib\site-packages\scipy\sparse\coo.py", line 194, in getnnz
nnz = len(self.data)
TypeError: len() of unsized object

我认为我需要首先创建稀疏矩阵,然后迭代地将值添加到它(我想象像.append但是到矩阵中的特定位置)但我不知道如何创建一个空的稀疏矩阵,然后为其赋值。

如果您需要进一步澄清,请与我们联系。谢谢!

1 个答案:

答案 0 :(得分:4)

传递给csc_matrix的元组中的第一个元素需要是值的向量,而您传递的是整数。更重要的是,您尝试在循环中多次调用csc_matrix构造函数,以便在每次迭代时覆盖sparse_matrix

您希望使用每个参数的向量调用csc_matrix 一次,如下所示:

values = results_array[:, 3]
row_idx = results_array[:, 2]
col_idx = results_array[:, 1]

sparse_array = csc_matrix((values, (row_idx, col_idx)), shape=(14, 14))