例如,让A = [3,4]
和Y是多个值的数组,如
Y = [2,3,2,2,2,2,2,3,3,3,3,3]
然后我想选择Y所在的所有标签,其中Y在A中
所以我写了下面的代码:
`Yij = [Y[Y == x] for x in a]`
输出:
[array([3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]), array([4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4])]
但这将导致列表清单。
另一方面,我想要一个普通的数组。
关于如何使这项工作的任何建议?
答案 0 :(得分:3)
列表理解解决方案:
>>> A = set([3, 4])
>>> Y = [2,3,2,2,2,2,2,3,3,3,3,3]
>>> Z = [y for y in Y if y in A]
>>> Z
[3, 3, 3, 3, 3, 3]
以下是显示使用set lookup和list lookup之间性能差异的一些时序:
In [21]: A = set(range(0, 1000, 5))
In [22]: B = list(range(0, 1000, 5))
In [23]: C = list(range(0, 1000))
In [24]: %timeit [y for y in C if y in A]
59.6 µs ± 329 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [25]: %timeit [y for y in C if y in B]
2.94 ms ± 103 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)