填写矩阵的对角线

时间:2019-04-13 20:10:13

标签: python python-3.x

我正在尝试编写一些代码,在其中我需要填写一个矩阵并使它成为身份矩阵,然后我决定将该矩阵制成n个列表的列表,其中第n个列表是一行。 >

I=[]

row=[]

for i in range (0,n):
    row.append(0)

for i in range (0,n):
    I.append(row)

for k in range (0,3):   
    I[k][k]=1

我希望这段代码在矩阵的对角线中放入1,其中对角线是I[k][k]元素k=0,1,2。 但是在第3个for循环中,我在每一步中将对角线中的0替换为1,而不是使I[k][k]=1 I[0][k]=I[1][k]=I[2][k]=1,最后得到一个矩阵,每个元素等于1。

我的问题不是如何在python或任何矩阵中创建单位矩阵,我的问题是,为什么第3个for循环这样做,显然I[k][k]是对角元素,为什么要使其他非对角元素元素等于1?

2 个答案:

答案 0 :(得分:1)

创建矩阵时,您可以嵌套for循环,并使用第二个循环填充行,并且当i等于j时,您将位于矩阵的对角线中:

matrix = []
n = 10

for i in range(0, n):
    row = []

    for j in range(0, n):
        if i == j:
            row.append(1)
        else:
            row.append(0)

    matrix.append(row)

答案 1 :(得分:1)

好问题!在Python中,变量是指针,因此I的每个元素都指向相同的row变量。因此,当您在I的一行中更改元素时,实际上是在所有行中都对其进行了更改。

这里是一个例子:

n = 3
row = []
for i in range(n):
    row.append(0)

I = []
for i in range(n):
    I.append(row)

现在,让我们尝试将第一行的第一个元素设置为1,I[0][0] = 1,但实际上会产生[[1, 0, 0], [1, 0, 0], [1, 0, 0]]

最后,要回答您的问题,即使您仅设置I的对角线条目,实际上也是设置I的所有元素,因为每一行在内存中都是相同的。 Omari Celestine之所以行之有效,是因为它为每一行分配了一个新的内存部分,而不只是一个内存部分。