2017-10-21 210 views
0

我有一个数组:[[True], [False], [True]]。如果我想要这个数组来过滤我现有的数组,例如[[1,2],[3,4],[5,6]]应该被过滤到[[1,2],[5,6]],那么执行此操作的正确方法是什么?Numpy中的滤波器阵列

一个简单的索引a[b]给出错误:boolean index did not match indexed array along dimension 1; dimension is 2 but corresponding boolean dimension is 1

+3

使用'a [b.ravel()]'。 – Divakar

+0

哇。那很快。谢谢。有用! :)请投票结束这个问题作为重复,如果你找到一个。我不能 –

回答

1

的解决方案是在阵列[[True], [False], [True]]进入形状[True, False, True],使得它适用于索引其他阵列的行。正如Divakar所说,ravel这样做;一般来说,它将任何阵列平铺为一维数组。另一种选择是squeeze它消除了与尺寸1的尺寸,但离开了其他维度,因为他们,

1

使用.ravel ...

从文档,ravel将:

Return a contiguous flattened array.

因此,如果我们有你的barray

b = np.array([[True], [False], [True]]) 

我们可以采取boolean个值了他们sub-arrays用:

b.ravel() 

这给:

array([ True, False, True], dtype=bool) 

那么,我们可以简单地使用b.ravel()作为掩模为a,它会工作,只要你想:

a = np.array([[1,2], [3,4], [5,6]]) 
b = np.array([[True], [False], [True]]) 

c = a[b.ravel()] 

它给出c为:

array([[1, 2], 
     [5, 6]])