使用嵌套循环为Numpy矩阵赋值仅第一行生效,求排查与解决方法
问题原因
你的代码只给第一行赋值,核心问题是变量j只在最开始初始化了一次。第一次外层循环(i=0)执行完内层while后,j的值已经变成3,后续外层循环(i=1、i=2)时,内层while的条件j<3直接不成立,根本不会执行赋值操作。
修正后的循环代码
把j的初始化放到外层循环里面,每次进入新的一行时重置j为0:
import numpy as np u = np.zeros((3,3)) i = 0 while i < 3: j = 0 # 每次外层循环开始时重置j while j < 3: u[i,j] = i + j j += 1 i += 1
运行后得到的完整矩阵:
array([[0., 1., 2.], [1., 2., 3.], [2., 3., 4.]])
更高效的Numpy矢量化写法
用Numpy不需要嵌套循环,直接利用广播机制生成矩阵,效率远高于循环:
import numpy as np # 方法1:利用数组广播 i = np.arange(3) j = np.arange(3) u = i[:, np.newaxis] + j # 方法2:用outer函数更简洁 u = np.add.outer(np.arange(3), np.arange(3))
内容的提问来源于stack exchange,提问作者Mechanician
相关产品推荐
相关产品推荐

