如何按迭代次数累加numpy数组首索引元素(最大迭代次数为2)
解决Numpy数组首列元素与迭代次数相加的结果不符问题
问题背景
需求为将Numpy数组的首列元素与迭代次数相加,最大迭代次数设为2,但运行代码后结果不符合预期,尤其是第二行元素。
原代码
import numpy as np a = np.array([[858,833,123], [323,542,927], [938,361,271], [679,272,451]]) max_iter = 2 for i in range(max_iter): for j in range(len(a)): a[j][0] += i
实际运行结果
[[859 833 123] [324 542 927] [939 361 271] [680 272 451]]
预期结果
[[859,833,123], [325,542,927], [939,361,271], [681,272,451]]
问题分析
原代码的逻辑是外层循环遍历迭代次数i(取值0、1),每次迭代给所有行的首列元素加i。第一次i=0,所有元素加0无变化;第二次i=1,所有元素加1,最终每个首列元素只累加了1,这和预期中部分元素累加2的结果不符。
从预期结果可推断,实际需求应为行索引为奇数的元素(第2、4行,对应索引1、3)首列加2,行索引为偶数的元素(第1、3行,对应索引0、2)首列加1。
修正代码
以下代码可实现预期结果:
import numpy as np a = np.array([[858,833,123], [323,542,927], [938,361,271], [679,272,451]]) max_iter = 2 for j in range(len(a)): # 奇数行加max_iter,偶数行加1 add_val = max_iter if j % 2 == 1 else 1 a[j][0] += add_val
运行后得到的结果与预期一致:
[[859 833 123] [325 542 927] [939 361 271] [681 272 451]]
内容的提问来源于stack exchange,提问作者stack offer
相关产品推荐
相关产品推荐

