假设我有这个NumPy数组:
a = np.array([0, 3, 5, 5, 0, 10, 14, 15, 56, 0, 12, 23, 45, 23, 12, 45,
0, 1, 0, 2, 3, 4, 0, 0 ,0])
Run Code Online (Sandbox Code Playgroud)
我想在0之间打印所有数字并自动将它们添加到新的数字中np.array
(见下文):
a1=[3, 5, 5]
a2=[10, 14, 15, 56]
a3=[12, 23, 45, 23, 12, 45]
a4=[1]
a5=[2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
是否有内置函数来执行此操作?
您可以使用groupby()
函数from itertools
,并将其指定key
为零或非零的布尔条件.以这种方式,所有连续的零和非零将被组合在一起.使用if
过滤器拾取非零组并用于list
将非零石斑鱼转换为列表.
from itertools import groupby
[list(g) for k, g in groupby(a, lambda x: x != 0) if k]
# [[3, 5], [10, 14, 15, 56], [12, 23, 45, 23, 12, 45], [1], [2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)
idx = np.where(a!=0)[0]
aout = np.split(a[idx],np.where(np.diff(idx)!=1)[0]+1)
Run Code Online (Sandbox Code Playgroud)
样品运行 -
In [23]: a
Out[23]:
array([ 0, 3, 5, 5, 0, 10, 14, 15, 56, 0, 0, 0, 12, 23, 45, 23, 12,
45, 0, 1, 0, 2, 3, 4, 0, 0, 0])
In [24]: idx = np.where(a!=0)[0]
In [25]: np.split(a[idx],np.where(np.diff(idx)!=1)[0]+1)
Out[25]:
[array([3, 5, 5]),
array([10, 14, 15, 56]),
array([12, 23, 45, 23, 12, 45]),
array([1]),
array([2, 3, 4])]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3541 次 |
最近记录: |