繁体   English   中英

有没有更快的方法来使用 2d numpy 布尔数组到 2d 数组中的 select 元素,但使用 2d output?

[英]Is there a faster method to use a 2d numpy array of booleans to select elements from a 2d array, but with a 2d output?

如果我有这样的数组

arr=np.array([['a','b','c'],
              ['d','e','f']])

和一组相同形状的布尔值,如下所示:

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

我希望能够只 select 来自第一个数组的元素,对应于 boolean 数组中的 True 。 所以 output 将是:

out=[['b'],
     ['d','e','f']]

我设法用一个简单的 for 循环解决了这个问题

out=[]
for n, i in enumerate(arr):
    out.append(i[boolarr[n]])
    out=np.array(out)

但问题是这个解决方案对于大型 arrays 来说很慢,并且想知道是否有更简单的 numpys 索引解决方案。 只需使用普通表示法arr[boolarr]返回单个平面数组['b','d','e','f'] 我还尝试使用带有arr[:,[True,False,True]]的切片,它保持形状但只能使用一个 boolean 数组。

感谢您的评论。 我误解了数组的工作原理。 对于那些好奇的人,这是我的解决方案(我实际上正在使用数字):

arr[boolarr]=np.nan

然后我只是改变了 function 的 rest 处理 nan 值的方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM