-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

这很容易。您的矩阵必须是方形的,否则它实际上没有“对角线”。对角线上的元素是A[i,i],所以你只需要循环for i in range(N)A[i,i] = -5为每个 i 设置。(没有必要的陈述)

于 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,但是您的数组必须是 a numpy.arrayor 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 回答