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的,谢谢!