1
私はnumpy配列A
の3次元を持っています。私は持っていますnumpy配列の "部分対角軸"を埋める方法
A[i, i, :] = 1.0
すべてi
です。
numpyでこれをどのようにエレガントに行うことができますか?すべてのfor
ループを避けることは可能ですか?
私はnumpy配列A
の3次元を持っています。私は持っていますnumpy配列の "部分対角軸"を埋める方法
A[i, i, :] = 1.0
すべてi
です。
numpyでこれをどのようにエレガントに行うことができますか?すべてのfor
ループを避けることは可能ですか?
アプローチ#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
動作します。しかし、それを理解する方法は?ドキュメントでは、「マスク」インデックス配列は、ビューではなくデータのコピーを返します。 https://docs.scipy.org/doc/numpy/user/basics.indexing.html –
@ChongWang私たちはマスクでデータを抽出していません、割り当てています。それで、ここは大丈夫です。 – Divakar
割り当て動作を詳しく説明するドキュメントはありますか? –