numpy 数值,使用另一个1D数组中表示的索引递增2D数组中的值

daolsyd0  于 2023-01-30  发布在  其他
关注(0)|答案(2)|浏览(134)

下面是我想做的一个例子:假设阵列A

A = np.array([[0, 1, 3, 5, 9], 
              [2, 7, 5, 1, 4]])

和阵列B

B = np.array([2, 4])

我正在寻找一个运算,它将数组A的每一行中数组B索引的元素递增1,因此结果A为:

A = np.array([[0, 1, 4, 5, 9], 
              [2, 7, 5, 1, 5]])

第一行的索引2增加1,第二行的索引4增加1

euoag5mw

euoag5mw1#

您可以通过在numpy中使用高级索引来实现这一点:

A[np.arange(len(B)), B] += 1

其工作原理是使用np.arange(len(B))(表示行索引)创建维度为(len(B), len(B))2D数组。高级索引的第二个索引B表示列索引。通过将A[np.arange(len(B)), B]加1,可以增加B指定的每行中的元素。

eaf3rand

eaf3rand2#

numpy中,您可以通过使用数组的arrangeshape来完成

import numpy as np

A = np.array([[0, 1, 3, 5, 9], 
              [2, 7, 5, 1, 4]])
B = np.array([2, 4])

A[np.arange(A.shape[0]), B] += 1

print(A)

np.arange(A.shape[0])0 to A.shape[0] - 1生成整数数组。A.shape[0]基本上是
你也可以用循环来做。

import numpy as np
A = np.array([[0, 1, 3, 5, 9], 
              [2, 7, 5, 1, 4]])
B = np.array([2, 4])

for i, index in enumerate(B):
    A[i][index] += 1

print(A)

相关问题