【发布时间】:2024-04-30 03:10:04
【问题描述】:
如果我有这样的数组
arr=np.array([['a','b','c'],
['d','e','f']])
还有一个相同形状的布尔数组,像这样:
boolarr=np.array([[False,True,False],
[True,True,True]])
我希望能够只从第一个数组中选择与布尔数组中的 True 相对应的元素。所以输出将是:
out=[['b'],
['d','e','f']]
我设法用一个简单的 for 循环解决了这个问题
out=[]
for n, i in enumerate(arr):
out.append(i[boolarr[n]])
out=np.array(out)
但问题是这个解决方案对于大型数组来说很慢,并且想知道是否有一个更简单的解决方案与 numpys 索引。只需使用普通符号 arr[boolarr] 即可返回单个平面数组 ['b','d','e','f']。我还尝试使用带有arr[:,[True,False,True]] 的切片,它保持形状但只能使用一个布尔数组。
【问题讨论】:
-
您的结果数组不是数字 dtype 的有效形状,它必须是对象,此时,您不妨使用列表
-
假设您及时获得了
out列表列表。然后呢?你打算用它做什么?使用这样的列表必然和生成它一样慢。 -
如果您可以使用填充数组,例如
np.array([['b','',''],['d','e','f']])我们可以建议一种相对快速的方式来分发这些arr[boolarr]值。但是您/我们需要更清楚地了解您真正需要什么。
标签: python arrays numpy indexing