-1

行列をループして、対角線 (左上から右下) に沿ったすべての数値を -5 に置き換えようとしています。以前の質問と回答を読みましたが、回答を得るために...を使用できることがわかりnp.fill_diagonal(A, -5)ました。ただし、if ステートメントでループを使用しようとしています。誰でも始めるのを手伝ってもらえますか? これが私のマトリックスです。

 A = array([[1.2,3.4,10.3],[2,8,78],[45,-36,8]]) 
4

3 に答える 3

4

これは非常に簡単です。マトリックスは正方形でなければなりません。そうでなければ、実際には「対角線」がありません。対角線上の要素はであるため、ループして i ごとに設定A[i,i]するだけです。(いいえ if ステートメントは必要ありません)for i in range(N)A[i,i] = -5

于 2012-10-18T19:04:21.573 に答える
1

私が正しければ、列と行を反復処理する必要があるため、(まったくばかげています):

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).

于 2012-10-18T19:13:23.100 に答える
0

を使用する必要があります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.        ]])
于 2012-10-18T19:20:54.997 に答える