行列をループして、対角線 (左上から右下) に沿ったすべての数値を -5 に置き換えようとしています。以前の質問と回答を読みましたが、回答を得るために...を使用できることがわかりnp.fill_diagonal(A, -5)
ました。ただし、if ステートメントでループを使用しようとしています。誰でも始めるのを手伝ってもらえますか? これが私のマトリックスです。
A = array([[1.2,3.4,10.3],[2,8,78],[45,-36,8]])
行列をループして、対角線 (左上から右下) に沿ったすべての数値を -5 に置き換えようとしています。以前の質問と回答を読みましたが、回答を得るために...を使用できることがわかりnp.fill_diagonal(A, -5)
ました。ただし、if ステートメントでループを使用しようとしています。誰でも始めるのを手伝ってもらえますか? これが私のマトリックスです。
A = array([[1.2,3.4,10.3],[2,8,78],[45,-36,8]])
これは非常に簡単です。マトリックスは正方形でなければなりません。そうでなければ、実際には「対角線」がありません。対角線上の要素はであるため、ループして i ごとに設定A[i,i]
するだけです。(いいえ if ステートメントは必要ありません)for i in range(N)
A[i,i] = -5
私が正しければ、列と行を反復処理する必要があるため、(まったくばかげています):
for i in A.shape[0]:
for j in A.shape[1]:
if i == j:
A[i,j] = -5
すでに配列/行列を持っている場合、これは必要ないと考えなければなりませんが、Mgilsonの答えを使用するか、さらに良いのはnumpy.fill_diagonal(array, value)
.
を使用する必要がありますnumpy
が、配列はもちろん anumpy.array
またはである必要がありnumpy.matrix
ます。
In [1]: import numpy as np
In [2]: A=np.random.random((3,3))
In [3]: A
Out[3]:
array([[ 5. , 0.47884865, 0.8596375 ],
[ 0.70925986, 5. , 0.29764543],
[ 0.98049303, 0.13811067, 5. ]])
In [4]: np.fill_diagonal(A, 5)
In [5]: A
Out[5]:
array([[ 5. , 0.47884865, 0.8596375 ],
[ 0.70925986, 5. , 0.29764543],
[ 0.98049303, 0.13811067, 5. ]])