下面是我想做的一个例子:假设阵列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
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指定的每行中的元素。
np.arange(len(B))
(len(B), len(B))
2D
A[np.arange(len(B)), B]
eaf3rand2#
在numpy中,您可以通过使用数组的arrange和shape来完成
numpy
arrange
shape
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]基本上是行你也可以用循环来做。
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)
2条答案
按热度按时间euoag5mw1#
您可以通过在numpy中使用高级索引来实现这一点:
其工作原理是使用
np.arange(len(B))
(表示行索引)创建维度为(len(B), len(B))
的2D
数组。高级索引的第二个索引B表示列索引。通过将A[np.arange(len(B)), B]
加1,可以增加B指定的每行中的元素。eaf3rand2#
在
numpy
中,您可以通过使用数组的arrange
和shape
来完成np.arange(A.shape[0])
从0 to A.shape[0] - 1
生成整数数组。A.shape[0]
基本上是行你也可以用循环来做。