Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy数组分割_Python_Arrays_Pandas_Numpy - Fatal编程技术网

Python Numpy数组分割

Python Numpy数组分割,python,arrays,pandas,numpy,Python,Arrays,Pandas,Numpy,我有一个numpy数组 import numpy as np arr = np.arange(20).reshape(2,10) arr[1,:] = 0 arr[1,2] = arr[1,5] = arr[1,7] = 1 print(arr) >>>[[0 1 2 3 4 5 6 7 8 9] >>> [0 0 1 0 0 1 0 1 0 0]] 我想提取重叠数组,从一个1开始,在下一个1后面结束。 预期产出: [[0 1 2 3] [0 0 1 0

我有一个
numpy
数组

import numpy as np

arr = np.arange(20).reshape(2,10)
arr[1,:] = 0
arr[1,2] = arr[1,5] = arr[1,7] = 1
print(arr)
>>>[[0 1 2 3 4 5 6 7 8 9]
>>> [0 0 1 0 0 1 0 1 0 0]]
我想提取重叠数组,从一个
1
开始,在下一个
1
后面结束。 预期产出:

[[0 1 2 3]
 [0 0 1 0]]

[[2 3 4 5 6]
 [1 0 0 1 0]]

[[5 6 7 8]
 [1 0 1 0]]

[[7 8 9]
 [1 0 0]]
目前,我有一个基于索引的for循环,在
numpy
上下文中感觉很尴尬,并且必须将第一段和最后一段视为特殊情况:

arr[1,0] = 1
ind = list(np.where(arr[1,:]))[0]
print(ind)

for i, j in enumerate(ind):
    if not i:
        continue
    curr = np.copy(arr[:, ind[i-1]:j+2])
    print(curr) 
        
#last segment
curr = np.copy(arr[:, j:])
print(curr)

这种方法给了我想要的输出,但我不能相信没有更好的方法来实现这一点(尽管这里的风滚草反应可能表明这一点)。如果有一个更简单的解决方案,那也不错。理想情况下,输出是这些数组或类似数据结构的列表;输出数组不必单独返回。

解决方案中有一部分是我最喜欢的,并不复杂:

split_idx = np.flatnonzero(arr[1]) + 2
>>> np.split(arr, split_idx, axis=1)
[array([[0, 1, 2, 3],
        [0, 0, 1, 0]]),
 array([[4, 5, 6],
        [0, 1, 0]]),
 array([[7, 8],
        [1, 0]]),
 array([[9],
        [0]])]
但有两件事表明,针对这个问题的任何
numpyic
方法的设计都很糟糕:

  • 您必须处理不同形状的列表,这些形状不是为
    numpy
    设计的。所以
    np.split
    相当慢
  • 不能一次循环一个数组。在内部项目开始时需要额外插入

你好。重叠部分(以及不同的启动和停止条件)存在于我对任何
numpy
解决方案的问题的理解不足。但由于我想将if用于绘图任务,这些都是固有的问题。我也不想在数组中插入点——提取子数组并相应地修改它们可能更好。但我知道什么?上次你想出了一个绝妙的解决方案。