2010-11-29 7 views
3

私はNumPy arrayでいくつかの作業をしていますが、時にはそれらを配列で掛ける必要があります。NumPy:配列をインプレースで乗算する方が良いでしょうか?

今、私のような何かをやっている:

rotation_matrix = np.matrix([ ... ]) 
for vector in vectors: 
    rotated_vec_mat = vector.T * rotation_matrix 
    vector[:] = np.array(rotated_vec_mat)[0] 

をしかし、それは醜いだ(と遅いです?)。

よりクリーンな方法がありますか?

答えて

3

はこれを行うにはより多くの意味を作る可能性があります:

vector_arr = np.concatenate([vector[np.newaxis, :] for vector in vectors], axis=0) 
rotated_vector_arr = np.dot(vector_arr, rotation_matrix) 

はその後 rotated_vector_arrの行は、あなたがそれらになりたいものです。全体を1つのマトリックス製品として扱い、BLASライブラリによってC/Fortranでループ処理を実行できます。

行列の乗算に行列()クラスを使用する必要はありません。配列はうまく動作します。 matrix()は*演算子をオーバーロードしますが、私はそれだけで物事を混乱させることがわかります。

+0

Hrm ...私は分かりません。 'np.concatenate'の呼び出しは何をしますか?例えば、 'ベクトル= np.array([1,2,3])'、 'np.concatenate(ベクトル[np.newaxis、:]、軸= 0) 、3]) '。 –

+0

Errr、私はそこにリスト内包を忘れてしまった。 – dwf

関連する問題