私は2つの配列AとBを持っています。NumPyでは、AをBのインデックスとして使用できます。生成SciPy CSR Sparse Arraysを使用してある配列を別の配列にインデックスする方法は?
A = np.array([[1,2,3,1,7,3,1,2,3],[4,5,6,4,5,6,4,5,6],[7,8,9,7,8,9,7,8,9]])
B= np.array([1,2,3,4,5,6,7,8,9,0])
c = B[A]
:
[[2 3 4 2 8 4 2 3 4] [5 6 7 5 6 7 5 6 7] [8 9 0 8 9 0 8 9 0]]
はしかし、私の場合、配列AとBは、scipyのダウンロードCSRスパース配列であり、彼らはインデックスをサポートしていないようです。
A_sparse = sparse.csr_matrix(A)
B_sparse = sparse.csr_matrix(B)
c = B_sparse[A_sparse]
これは、その結果:アレイの上にループとを有する
def index_sparse(A,B):
A_sparse = scipy.sparse.coo_matrix(A)
B_sparse = sparse.csr_matrix(B)
res = sparse.csr_matrix(A_sparse)
for i,j,v in zip(A_sparse.row, A_sparse.col, A_sparse.data):
res[i,j] = B_sparse[0, v]
return res
res = index_sparse(A, B)
print res.todense()
:スパース配列でnumpyのの行動を再現するには、以下の機能を私が作ってみた
IndexError: Indexing with sparse matrices is not supported except boolean indexing where matrix and index are equal shapes.
Pythonで新しい配列を作成するのは理想的ではありません。 SciPy/NumPyの組み込み関数を使ってこれを行うより良い方法はありますか?