Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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_Numpy_Split - Fatal编程技术网

Python 当序列两端都有特定值时,将numpy数组拆分为子数组

Python 当序列两端都有特定值时,将numpy数组拆分为子数组,python,arrays,numpy,split,Python,Arrays,Numpy,Split,我有一个numpy数组,如下所示: array([0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.00791667, 0. , 0. , 0. , 0. , 0. , 0.06837452,

我有一个numpy数组,如下所示:

array([0.        , 0.        , 0.        , 0.        , 0.        ,
       0.        , 0.        , 0.        , 0.        , 0.        ,
       0.00791667, 0.        , 0.        , 0.        , 0.        ,
       0.        , 0.06837452, 0.09166667, 0.00370881, 0.        ,
       0.        , 0.00489809, 0.        , 0.        , 0.        ,
       0.        , 0.        , 0.23888889, 0.        , 0.05927778,
       0.12138889, 0.        , 0.        , 0.        , 0.36069444,
       0.31711111, 0.16333333, 0.15005556, 0.01      , 0.005     ,
       0.14357413, 0.        , 0.15722222, 0.29494444, 0.3245    ,
       0.31276639, 0.095     , 0.04750292, 0.09127039, 0.        ,
       0.06847222, 0.17      , 0.18039233, 0.21567804, 0.15913079,
       0.4579781 , 0.        , 0.2459    , 0.14886556, 0.08447222,
       0.        , 0.13722222, 0.28336984, 0.0725    , 0.077355  ,
       0.45166391, 0.        , 0.24892933, 0.25360062, 0.        ,
       0.12923041, 0.16145892, 0.48771795, 0.38527778, 0.29432968,
       0.31983305, 1.07573089, 0.30611111, 0.        , 0.0216475 ,
       0.        , 0.62268056, 0.16829156, 0.46239719, 0.6415958 ,
       0.02138889, 0.76457155, 0.05711551, 0.35050949, 0.34856278,
       0.15686164, 0.23158889, 0.16593262, 0.34961111, 0.21247575,
       0.14116667, 0.19414785, 0.09166667, 0.93376627, 0.12772222,
       0.00366667, 0.10297222, 0.173     , 0.0381225 , 0.22441667,
       0.46686111, 0.18761111, 0.56037889, 0.47566111])
从这个数组中,我需要计算每个子数组的曲线下面积,其中第一个值为0,大于0,最后一个数字应该是非零数后的0。显然,数组长度会有所不同。也可能出现这样的情况:其中两个子数组将共享一个0值(如果第二个数组为0,则第一个数组的最后一个0将是第一个0)

预期的前两个阵列应为:

[0.        ,           0.00791667, 0.        ]
[0.        , 0.06837452, 0.09166667, 0.00370881, 0.        ]

我尝试过根据等于0的字符拆分python列表,但没有发现任何有用的东西。我能做什么?

请看下面的代码-我认为这是您能做的最有效的

首先,使用所有零的索引拆分数组。如果多个零放在一起,则会生成多个
[0.]
数组,因此将这些数组过滤掉(基于长度,因为所有数组都必须以零开头)以生成C。最后,由于所有数组都以零开头,但没有一个以零结尾,因此在每个数组中附加一个零

import numpy as np

# <Your array here>
A = np.array(...)

# Split into arrays based on zeroes
B = np.split(A, np.where(A == 0)[0])

# Filter out arrays of length 1
#  (just a zero, caused by multiple zeroes together)
f = np.vectorize(lambda a: len(a) > 1)
C = np.extract(f(B), B)

# Append a zero to each array
g = np.vectorize(lambda a: np.append(a, 0), otypes=[object])
D = g(C)

# Output result
for array in D:
    print(array)

请参阅下面的代码-我认为这是您能够做到的最有效的方法

首先,使用所有零的索引拆分数组。如果多个零放在一起,则会生成多个
[0.]
数组,因此将这些数组过滤掉(基于长度,因为所有数组都必须以零开头)以生成C。最后,由于所有数组都以零开头,但没有一个以零结尾,因此在每个数组中附加一个零

import numpy as np

# <Your array here>
A = np.array(...)

# Split into arrays based on zeroes
B = np.split(A, np.where(A == 0)[0])

# Filter out arrays of length 1
#  (just a zero, caused by multiple zeroes together)
f = np.vectorize(lambda a: len(a) > 1)
C = np.extract(f(B), B)

# Append a zero to each array
g = np.vectorize(lambda a: np.append(a, 0), otypes=[object])
D = g(C)

# Output result
for array in D:
    print(array)
其中(numpy.r_[test[:-1]==0,True]&numpy.r_[test[1:]>test[:-1],True])将为您提供所有定界0。这里:数组([9,15,20,26,28,33,41,49,56,60,66,69,78,80,108]),然后在此循环。我还没有找到一种在一个“命令”numpy中生成数组的方法。其中(numpy.r_[test[:-1]==0,True]&numpy.r_[test[1:]>test[:-1],True])将为您提供所有的定界0。这里:数组([9,15,20,26,28,33,41,49,56,60,66,69,78,80,108]),然后在此循环。我还没有找到在一个“命令”中生成数组的方法