[英]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.