使用for和while循环遍历二维NumPy数组的赋值问题求助
解决全1二维数组与arange数组逐元素相乘的问题
嘿,我一眼就看到你代码里的问题了——输出全是1,根本没执行到相乘的逻辑,咱们一步步来搞定它:
你的代码里的几个关键错误:
- while循环条件完全错误:你写的
while j > 2,但j初始值是0,0>2永远不成立,所以这个循环一次都没跑过,数组自然还是原来的全1。正确的应该是while j < size,这样才能遍历每一列的元素。 - 索引计算错误:
range_matrix[i + j]的逻辑不对,比如当i=1、j=0时,你取的是索引1的元素,但此时应该取第4个元素(索引3),正确的索引应该是i * size + j,也就是行号乘以列数加上列号,这样才能按顺序取一维数组的元素。 - 多余的
i +=1:你已经用了for i in range(size)来遍历行,这个循环会自动帮你递增i,后面再加i +=1会导致i跳步,跳过部分行的处理。
修正后的循环版本代码
如果你坚持要用循环实现,修正后的代码如下:
import numpy as np size = int(input("Enter the matrix size:")) one_matrix = np.ones((size, size), dtype=int) total_elements = size * size range_matrix = np.arange(1, total_elements + 1) for i in range(size): j = 0 while j < size: # 正确计算一维数组的索引 one_matrix[i][j] = range_matrix[i * size + j] j += 1 print(one_matrix)
更高效的NumPy原生方法(推荐)
其实用NumPy完全不需要写循环,它的向量操作比Python循环高效太多,尤其是当矩阵规模大的时候。我们可以直接把一维数组reshape成对应大小的二维数组,再和全1数组相乘(因为全1乘任何数等于它本身,其实直接赋值也可以):
import numpy as np size = int(input("Enter the matrix size:")) # 直接生成对应形状的目标数组,一步到位 result_matrix = np.arange(1, size*size + 1).reshape(size, size) # 如果一定要保留和全1数组相乘的逻辑: # one_matrix = np.ones((size, size), dtype=int) # result_matrix = one_matrix * np.arange(1, size*size + 1).reshape(size, size) print(result_matrix)
这样运行后,输入3的话,就会输出你预期的:
[[1 2 3] [4 5 6] [7 8 9]]
内容的提问来源于stack exchange,提问作者Mahesh Padmanabh
相关产品推荐
相关产品推荐

