使用if语句改变矩阵的对角线?

时间:2012-10-18 19:02:13

标签: python

我试图循环一个矩阵来替换对角线上的每个数字(从左上角到右下角),用-5。我已经阅读了之前的问题和答案,我发现您可以使用... np.fill_diagonal(A, -5)来获得答案。但是我试图使用if语句循环。任何人都可以帮助我开始吗?这是我的矩阵。

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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)

答案 2 :(得分:0)

您应该使用numpy,但您的数组必须是numpy.arraynumpy.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.        ]])