2017-03-31 11 views
0

4Dスパース行列(21x21x21x21)を使用しています。要素の1つだけが1に設定されます。その後、この行列をベクトル化して非ゼロの行を決定します。プロセス全体には約6分かかるため、時間がかかりすぎます。これをPythonで効率的に行う方法はありますか?Pythonで4Dスパース行列を効率的に作成して処理する方法

sparseMatrix = np.zeros((21,21,21,21), dtype = np.int8) 
#w,x,y,z can be any random integer from 0 to 20. 
w = 3 
x = 5 
y = 18 
z = 16 
sparseMatrix[w, x, y, z] = 1 
sparseMatrix_vec = np.reshape(sparseMatrix, [-1,1]) 
sparseMatrix_vec_index = np.nonzero(sparseMatrix_vec)[0][0] 
+0

あなたのプロジェクトでは、1つの1を含む21x21x21x21の疎な行列で終わりますか?このような場合は、単にデータ表現を変更する必要があります。データを取得するプロセスを使用して、1の位置を単純にエンコードします。 – ma3oun

+0

@ ma3oun、返事をありがとう。これをどのようにエンコードするかの例を挙げることができますか?はい、私はいつも21x21x21x21の疎な行列で終わるでしょう。 –

+0

テンソルフローを使用して、疎なデータを表現することもできます。 Tensorflowは疎なテンソルをサポートし、これらはより効率的に処理されます。詳細はこちら:https://www.tensorflow.org/api_docs/python/tf/SparseTensor – ma3oun

答えて

1

必要な場合は(X、Y、Z w)は(X、Y、Z、W)のそれぞれは、0と20の間で変化することができるユニークな整数を形成するために、単にベース21の表現を使用します。あなたが探している整数は:

N = w *(21 ** 0)+ x *(21 ** 2)+ y *(21 ** 2)+ z *(21 ** 3)です。

整数を指定すると、整数除算とモジュラスを使用して(w、x、y、z)に戻ることができます。

関連する問題