2016-05-13 17 views
0

したがって、1つのnumpy配列から疎行列に値をコピーしようとしています。最初の配列は次のようになります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を指示する、第3の値(results_array[i][2])は、行番号と第4の値(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のようなものを想像していますが、マトリックスの特定の場所に)私は空の疎な行列を作成し、それに値を割り当てる方法は考えていません。

さらに詳しい説明が必要な場合はお知らせください。ありがとう!

答えて

3

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)) 
+0

魔法だこと。どうもありがとうございます。ベクトルは理にかなっています! –

関連する問題