2017-03-27 4 views
1

私はnumpy配列Aの3次元を持っています。私は持っていますnumpy配列の "部分対角軸"を埋める方法

A[i, i, :] = 1.0 

すべてiです。

numpyでこれをどのようにエレガントに行うことができますか?すべてのforループを避けることは可能ですか?

答えて

2

アプローチ#1あなたはnp.eye斜めマスクを作成して割り当てるには、ブール・インデックスを使用することができます -

mask = np.eye(A.shape[0], dtype=bool) 
A[mask] = 1.0 

整数ベースのインデックスを使用したアプローチ#2 -

r = np.arange(A.shape[0]) 
A[r,r] = 1.0 

アプローチ3#2Dに変更し、行に割り当てます -

n = A.shape[0] 
A.reshape(-1,A.shape[-1])[np.arange(n)*(n+1)] = 1.0 
+0

動作します。しかし、それを理解する方法は?ドキュメントでは、「マスク」インデックス配列は、ビューではなくデータのコピーを返します。 https://docs.scipy.org/doc/numpy/user/basics.indexing.html –

+0

@ChongWang私たちはマスクでデータを抽出していません、割り当てています。それで、ここは大丈夫です。 – Divakar

+0

割り当て動作を詳しく説明するドキュメントはありますか? –

関連する問題