numpy 通过嵌套循环分配矩阵仅对第一行有效

w7t8yxp5  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(66)

请参见下面的简化代码

import numpy as np
u=np.zeros((3,3))
i,j=0,0
while i<3:
    while j<3:
        u[i,j]=i+j
        j=j+1
    i=i+1

字符串
我期待一个完整的矩阵u(除了[0,0]元素)。此代码似乎只分配给u的第一行。我过去在MATLAB中成功地使用过类似的东西

yrefmtwq

yrefmtwq1#

主要的问题是,当内部循环完成时,您忘记重置索引j。在第一行之后,j将大于3,因此u[i, j]将没有意义。正确的代码是:

import numpy as np
u=np.zeros((3,3))
i=0
while i<3:
    j=0
    while j<3:
        u[i,j]=i+j
        j=j+1
    i=i+1

字符串
这应该可以解决您的问题并将u初始化为以下数组:

[[0. 1. 2.]
 [1. 2. 3.]
 [2. 3. 4.]]


请注意,尽管代码是正确的,但可以使用for循环和范围重写它以使其更清晰:

import numpy as np
u = np.zeros((3, 3))
for i in range(3):
    for j in range(3):
        u[i, j] = i+j

evrscar2

evrscar22#

这是因为在进入第二个循环之前没有重置j。第一次内循环完成时,我们有j=3,因此在第一次之后我们永远不会进入内循环。要修复,只需在进入第二个循环之前添加j=0即可。

相关问题