使用NumPy和列表理解:>>> from numpy import *
解决方案1:
^{pr2}$
解决方案2:>>> [x[x!=0] for x in LA if count_nonzero(x)]
[array([ 99.08322813, 253.42371683, 300.792029 ]),
array([ 51.55274095, 106.29707418]),
array([ 149.07283952, 191.45513754, 251.19610503, 393.50806493,
453.56783459]),
array([ 105.61643877, 442.76668729, 450.37335607]),
array([ 348.84179544]),
array([ 295.05603151, 451.77083268, 500.81771919]),
array([ 295.05603151, 307.37232315, 451.77083268, 500.81771919]),
array([ 91.86758237, 148.70156948, 488.70648486, 507.31389766]),
array([ 353.68691095]),
array([ 208.21919198, 246.57665959, 251.33820305, 394.34266882])]
定时比较:In [56]: %timeit [x[x!=0] for x in LA if len(x) and len(x[x!=0])]
10000 loops, best of 3: 176 µs per loop
In [88]: %timeit [x[x!=0] for x in LA if count_nonzero(x)]
10000 loops, best of 3: 89.7 µs per loop
#@gnibbler's solution:
In [82]: %timeit [x.compress(x) for x in LA if x.any()]
10000 loops, best of 3: 138 µs per loop
较大阵列的计时结果:In [140]: LA = [resize(x, 10**5) for x in LA]
In [142]: %timeit [x[x!=0] for x in LA if len(x) and len(x[x!=0])]
10 loops, best of 3: 26.7 ms per loop
In [143]: %timeit [x[x!=0] for x in LA if count_nonzero(x) > 0]
10 loops, best of 3: 26 ms per loop
In [144]: %timeit [x.compress(x) for x in LA if x.any()]
10 loops, best of 3: 42.7 ms per loop
In [145]: %timeit [x.compress(x) for x in LA if count_nonzero(x)]
10 loops, best of 3: 45.8 ms per loop
In [146]: %timeit [x[x!=0] for x in LA if x.any()]
10 loops, best of 3: 22.9 ms per loop
In [147]: %timeit [x[x!=0] for x in LA if count_nonzero(x)]
10 loops, best of 3: 26.2 ms per loop