Numpy 多变量索引?

Numpy 多变量索引?,numpy,indexing,Numpy,Indexing,我想,有可能一次索引多个维度吗?通过一些广播。例如: 假设我有一个数组A,形状(n,d)。假设我有一个索引数组,比如说i,其整数值介于0和d-1之间。设置B=A[:,I] 如果shape(I)=(k,),对于k,则B具有shape(n,k)和B[x,y]=A[x,I[y] 但是如果shape(I)=(k,p)对于任何(k,p),那么我希望B被(n,k,p)塑造成B[x,y,z]=A[x,I[y,z] 1°我如何获得这种行为 2°是否有我没有看到的缺点 您可以完全按照您描述的方式进行: impor

我想,有可能一次索引多个维度吗?通过一些广播。例如:

假设我有一个数组
A
,形状
(n,d)
。假设我有一个索引数组,比如说
i
,其整数值介于
0
d-1
之间。设置
B=A[:,I]

如果
shape(I)=(k,)
,对于
k
,则
B
具有shape
(n,k)
B[x,y]=A[x,I[y]

但是如果
shape(I)=(k,p)
对于任何
(k,p)
,那么我希望
B
(n,k,p)
塑造成
B[x,y,z]=A[x,I[y,z]

1°我如何获得这种行为


2°是否有我没有看到的缺点

您可以完全按照您描述的方式进行:

import numpy as np
n = 100
d = 20
k = 10
p = 17

A = np.random.random((n, d))
I = np.random.randint(low=0, high=d, size=(k, p))
B = A[:, I]
print(B.shape)  # (n, k, p)

# Testing if the new array B is constructed as expected
x = 3
y = 5
z = 7
print(B[x, y, z])
print(A[x, I[y, z]])
print(B[x, y, z] == A[x, I[y, z]])

如果没有上下文,很难回答这是否是一个好的实现。但总的来说,如果你想提高速度,使用numpy和矢量化是个好主意。

我不知道是什么让我困惑。我想我很难理解掩蔽和索引之间的区别,我会继续读下去。无论如何,谢谢你的提醒!你让我开心。。