如何对numpy数组中的第一个索引求和

t2a7ltrp  于 2023-03-08  发布在  其他
关注(0)|答案(3)|浏览(161)

数组的第一个下标如何与迭代次数求和,最大迭代次数为2。
我已经尝试使用下面的代码,但我仍然得到错误的结果索引号2.

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]
oknwwptz

oknwwptz1#

问题不清楚要求,我只是猜测您希望按顺序将(1, max_iterator)范围内的数字添加到行中,例如:

  • 第1行加1
  • 第2行加2
  • 第3行加1
  • 第4行加2
  • 1分配到第5行
  • 等等

如果是这样,您可以通过以下操作来完成:

a = np.array([[858,833,123],
             [323,542,927],
             [938,361,271],
             [679,272,451]])
max_iter = 2
iter = 0
for i in range(len(a)):
    a[i][0] = a[i][0] + (iter % max_iter) + 1
    iter += 1
print(a)

输出将符合预期:

[859,833,123],
[325,542,927],
[939,361,271],
[681,272,451]
gz5pxeao

gz5pxeao2#

你快到了!你只是加错了值。

关键问题是你在不断地增加i,实际上(我认为)你想在第一行加1,第二行加2,第三行加1,第四行加2。
请记住,行号是从1开始的索引。因此,您可以执行% 2,使第一行#0为0。您可以将其添加1,以获得所需的增量,即1。
第二行#1给出1;加1得到2,这是该行的正确增量。
第三行#2给出0;当你加1时,你得到1,这是该行的正确增量,以此类推。

a = np.array([[858,833,123],
[323,542,927],
[938,361,271],
[679,272,451]])

max_iter = 2
for row in range(len(a)):
        increment = (row % max_iter) +1 
        a[row][0] += increment
vzgqcmou

vzgqcmou3#

您可以将1和2重复到len(a)大小,然后将它们添加到arr的第一列

max_iter = 2
arr = [(i % max_iter)+1 for i in range(len(a))]
a[:, 0] += arr
$ print(arr)

[1, 2, 1, 2]

$ print(a)

[[859 833 123]
 [325 542 927]
 [939 361 271]
 [681 272 451]]

相关问题