Sは大きなscipy-csr-matrix(疎)であり、key-> index(位置)の辞書Dです。 S &の行ベクトルA values - > Sの他の行ベクトルlのすべてのインデックス(位置)のリストlの各行ベクトルに対して、Aを減算して新しいベクトルを得る。新しいスパース行列で更新されます。フォームのPythonで与えられた大きな疎行列の異なる行の操作から新しい疎行列を作成する
辞書 - > {1:[4,5、...、63]}次に で新しいスパース行列を作成する必要が....
new_row_vector_1 - > S_vec - S_vec
new_row_vector_2 - > S_vec - S_vec
。
new_row_vector_n - > S_vec - S_vec S_vecXが
Check out the pictorial explanation of the above statements
numpyの例行列SのX番目の行ベクトルである
:
>>> import numpy as np
>>> s = np.array([[1,5,3,4],[3,0,12,7],[5,6,2,4],[4,6,6,4],[7,12,5,67]])
>>> s
array([[ 1, 5, 3, 4],
[ 3, 0, 12, 7],
[ 5, 6, 2, 4],
[ 4, 6, 6, 4],
[ 7, 12, 5, 67]])
>>> index_dictionary = {0: [2, 4], 1: [3, 4], 2: [1], 3: [1, 2], 4: [1, 3, 2]}
>>> n = np.zeros((10,4)) #sum of all lengths of values in index_dictionary would be the number of rows for the new array(n) and columns remain the same as s.
>>> n
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> idx = 0
>>> for index in index_dictionary:
... for k in index_dictionary[index]:
... n[idx] = s[index]-s[k]
... idx += 1
...
>>> n
array([[ -4., -1., 1., 0.],
[ -6., -7., -2., -63.],
[ -1., -6., 6., 3.],
[ -4., -12., 7., -60.],
[ 2., 6., -10., -3.],
[ 1., 6., -6., -3.],
[ -1., 0., 4., 0.],
[ 4., 12., -7., 60.],
[ 3., 6., -1., 63.],
[ 2., 6., 3., 63.]])
N私が欲しいものです。
まずnumpyの配列バージョン:今
In [619]: arr=np.arange(12).reshape(4,3)
In [620]: arr[[1,0,2,3]]-arr[0]
Out[620]:
array([[3, 3, 3],
[0, 0, 0],
[6, 6, 6],
[9, 9, 9]])
スパース同等:
あなたは小さな定期 'numpy'配列でこれを行うだろう方法を示します。良い例では、スパース行列に特別な処理が必要かどうかを心配することができます。 – hpaulj
コメントありがとうございます。確認してください、numpyの配列の場合に私たちがそれを行う方法についての例を加えました。 – xlax
これを幾分高いレベルとして必要とする理由についていくつかの文脈を教えてください。私の直感は、少し問題を再考することによって、それがはるかに優雅にnumpyの操作にマッピングされるかもしれないということです。 –