如何解决有没有一种更快的方法来使用2d的numpy布尔数组从2d数组中选择元素,但是具有2d输出?
如果我有这样的数组
arr=np.array([['a','b','c'],['d','e','f']])
和形状相同的布尔数组,如下所示:
boolarr=np.array([[False,True,False],[True,True]])
我希望只能从第一个数组中选择与布尔数组中的True对应的元素。因此输出为:
out=[['b'],'f']]
我设法通过一个简单的for循环来解决此问题
out=[]
for n,i in enumerate(arr):
out.append(i[boolarr[n]])
out=np.array(out)
,但是问题是此解决方案对于大型数组而言速度较慢,并且想知道是否存在使用numpys索引的更简单解决方案。仅使用常规表示法arr[boolarr]
即可返回单个平面数组['b','d','f']
。我还尝试过使用带有arr[:,False,True]]
的切片,这样可以保持形状但只能使用一个布尔数组。
解决方法
感谢您的评论。我误解了数组的工作原理。对于那些好奇的人,这是我的解决方案(我实际上是在处理数字):
arr[boolarr]=np.nan
然后我只是更改了其余函数处理nan值的方式
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。