所以我试图将一个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
但是到矩阵中的特定位置)但我不知道如何创建一个空的稀疏矩阵,然后为其赋值。
如果您需要进一步澄清,请与我们联系。谢谢!
答案 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))