切片并更改numpy 2D数组,每行的列索引列表不同
我想使用列索引列表对2D numpy数组进行切片。困难在于每行的列索引不同。例如:切片并更改numpy 2D数组,每行的列索引列表不同,numpy,numpy-ndarray,numpy-slicing,Numpy,Numpy Ndarray,Numpy Slicing,我想使用列索引列表对2D numpy数组进行切片。困难在于每行的列索引不同。例如: x = np.array([[0, 1, 2] [3, 4, 5] [6, 7, 8]]) 我有一个列索引列表 indices = [[0, 1], [2, 1], [2, 2]] 这意味着我想为第0行获取列[0,1],为第1行获取列[2,1],为第2行获取列[2,2]。结果应该是 result = np.array([0, 1],
x = np.array([[0, 1, 2]
[3, 4, 5]
[6, 7, 8]])
我有一个列索引列表
indices = [[0, 1], [2, 1], [2, 2]]
这意味着我想为第0行获取列[0,1]
,为第1行获取列[2,1]
,为第2行获取列[2,2]
。结果应该是
result = np.array([0, 1],
[5, 4],
[8, 8]])
如何使用numpy的切片而不涉及for循环
编辑:
我看到一些答案提到使用np。沿轴(x,索引,1)取\u
此函数通过对原始数组的值进行处理来创建一个新数组。这对于从数组中读取值非常有用,但不能用于增加原始数组的值。是否有任何类似的矩阵可用于修改原始数组的值,例如np。沿_轴(x,索引,1)+=10取_?当然,行的列索引是唯一的,以避免歧义 你想要什么
链接问答的公认答案建议使用A[np.arange(A.shape[0])[:,None],B]
进行索引,同样的索引操作也可以用于递增,即在RHS上只需执行+=1
即可递增1。@Divakar这就像魔术一样,谢谢
np.take_along_axis(x, np.array(indices), axis = 1)
Out[]:
array([[0, 1],
[5, 4],
[8, 8]])