【发布时间】:2021-10-11 08:37:48
【问题描述】:
我有一个二维 np 数组,我需要通过列表中给出的值有效地过滤它。
b = np.array([['a', 'b', 'c', 'd'], ['b', 'a', 'c', 'd'], ['c', 'b', 'a', 'd'], ['a', 'd', 'c', 'b']])
values_to_stay_in_b = ['a', 'b']
我找到了使用设置差异的解决方案,但是数组 b 中的位置很重要。
有比以下简单列表推导更好的解决方案吗:
output = []
for l in b:
output.append([a for a in l if a in values_to_stay_in_b ])
np.array(output)
结果:
array([['a', 'b'],
['b', 'a'],
['b', 'a'],
['a', 'b']], dtype='<U1')
【问题讨论】:
-
输出中每行的列数总是相同吗?
-
无论如何,您都必须遍历所有值。所以就效率而言,我认为没有什么可做的。您可以将 values_to_stay_in_b 存储在字典中以缩短查找时间。如果您正在寻找编写更 Pythonic 的方法,也许您可以使用像
b[b=='a']这样的调用。 -
@DaniMesejo 是的