Python 获取任意形状的多维numpy数组的索引,并将其用于另一个数组

Python 获取任意形状的多维numpy数组的索引,并将其用于另一个数组,python,python-3.x,numpy,numpy-ndarray,Python,Python 3.x,Numpy,Numpy Ndarray,我有两个形状相同的多维数组a和b: print(a.shape) -> (100, 20, 3, 3) print(b.shape) -> (100, 20, 3, 3) 现在我只想从a中获取符合特定条件的值,例如: wanted_value = 5 result_a = a[a[:, :, :, 0] == wanted_value] 但是,现在假设我想从另一个索引数组b中获取数据,这些索引对应于数组a中找到的元素的索引。是否可以使用我从搜索数组a中获得的索引来搜索数组b上的特

我有两个形状相同的多维数组
a
b

print(a.shape) -> (100, 20, 3, 3)
print(b.shape) -> (100, 20, 3, 3)
现在我只想从
a
中获取符合特定条件的值,例如:

wanted_value = 5
result_a = a[a[:, :, :, 0] == wanted_value]
但是,现在假设我想从另一个索引数组
b
中获取数据,这些索引对应于数组
a
中找到的元素的索引。是否可以使用我从搜索数组
a
中获得的索引来搜索数组
b
上的特定条件,从而从数组
b
中获取数据,这些索引对应于数组
a
具有的相同形状的相同索引?我之所以需要它,是因为我无法搜索数组
b
以获得我需要的条件,但数组
b
的数据/元素分别对应于数组
a

这可能吗? 我试过这样的方法:

indices = np.where(a[a[:, :, :, 0] == wanted_value])
results_b = b[indices]

对。这比你想象的还要简单:

b[a[:, :, :, 0] == wanted_value]

它的工作方式是,
a[:,:,:,0]==wanted\u value
本身创建一个带有
dtype=bool
的Numpy数组,在文档中称为掩码。您可以将其应用于相同形状的任何数组。

是。这比你想象的还要简单:

b[a[:, :, :, 0] == wanted_value]

它的工作方式是,
a[:,:,:,0]==wanted\u value
本身创建一个带有
dtype=bool
的Numpy数组,在文档中称为掩码。您可以将其应用于相同形状的任何数组。

Numpy支持布尔索引,即当您使用布尔数组索引Numpy数组时,将返回truthvalue为
True
的所有值。当obj是布尔类型的数组对象时,会发生此高级索引。比较运算符返回布尔对象,因此这些对象可用于索引

a = np.random.randint(0, 500, (100,20,3,3))
b = np.copy(a)
assert np.array_equal(a[a[:,:,:,0] == 1], b[a[:,:,:,0] == 1])

检查来自的官方文档。

Numpy支持布尔索引,即当您使用布尔数组索引Numpy数组时,将返回truthvalue为
True
的所有值。当obj是布尔类型的数组对象时,会发生此高级索引。比较运算符返回布尔对象,因此这些对象可用于索引

a = np.random.randint(0, 500, (100,20,3,3))
b = np.copy(a)
assert np.array_equal(a[a[:,:,:,0] == 1], b[a[:,:,:,0] == 1])

查看官方文档。

提示:尝试查看
a[:,:,:,0]==通缉值本身提供的内容。提示:尝试查看
a[:,:,:,0]==通缉值本身提供的内容。如此方便和简单,您一定会喜欢numpy,谢谢!这么方便,这么简单,你一定会喜欢numpy的,谢谢!