Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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中的特定值将数组拆分为多个数组_Python_Arrays_Pandas_Numpy_Split - Fatal编程技术网

如何根据python中的特定值将数组拆分为多个数组

如何根据python中的特定值将数组拆分为多个数组,python,arrays,pandas,numpy,split,Python,Arrays,Pandas,Numpy,Split,假设我有一个随机值数组。在数组中有一个值接近0,但不是0,它在随机位置连续重复。我要做的是找到这些值,并在这个位置将数组拆分为多个数组,同时删除重复的值。限制是,如果连续重复的次数不超过两次,则无法消除该值 例如: array=np.array([-0.005,-0.004,0.00002,-0.003,0.004,0.00002,0.00002,0.00002,0.00002, 0.005,0.003,0.00002,0.0006,0.008,0.00002,0.000

假设我有一个随机值数组。在数组中有一个值接近0,但不是0,它在随机位置连续重复。我要做的是找到这些值,并在这个位置将数组拆分为多个数组,同时删除重复的值。限制是,如果连续重复的次数不超过两次,则无法消除该值

例如:

array=np.array([-0.005,-0.004,0.00002,-0.003,0.004,0.00002,0.00002,0.00002,0.00002,
            0.005,0.003,0.00002,0.0006,0.008,0.00002,0.00002,0.00002,
            -0.003,0.006,0.007,0.00002,0.00002,0.00002])
minval=np.abs(array).min()
print(minval)
我发现0.00002是最接近0的值,因此我的目标是获得:

array1=([-0.005,-0.004,0.00002,-0.003,0.004],[0.005,0.003,0.00002,0.0006,0.008],[-0.003,0.006,0.007])

在Python中有没有一种方便的方法可以做到这一点?

您可以这样做:

import numpy as np
array=np.array([-0.005,-0.004,0.00002,-0.003,0.004,0.00002,0.00002,0.00002,0.00002,
            0.005,0.003,0.00002,0.0006,0.008,0.00002,0.00002,0.00002,
            -0.003,0.006,0.007,0.00002,0.00002,0.00002])
absArr = np.abs(array)
min_val=absArr.min()
idx = np.where(absArr == min_val)[0]

grad= idx[1:] - idx[:-1]

arrs = []
for l,u,g in zip(idx[:-1],idx[1:],grad):
    print(l,u,g)
    if g > 1:
        arrs.append(array[l:u])
然后
arrs
有以下内容:

[[ 2.e-05 -3.e-03  4.e-03],
[2.e-05 5.e-03 3.e-03],
[2.e-05 6.e-04 8.e-03],
[ 2.e-05 -3.e-03  6.e-03  7.e-03]]

使用迭代器可以相对轻松地实现这一点:

将numpy导入为np
def按最小值拆分(arr):
equals=np.isclose(arr,np.abs(arr).min())
l=[]
准备好了吗
对于范围内的i(len(arr)):
如果等于[i]且i
输出:

[-0.005, -0.004, 2e-05, -0.003, 0.004]
[0.005, 0.003, 2e-05, 0.0006, 0.008]
[-0.003, 0.006, 0.007]

您的输出是否与您的限制一致?限制是,如果连续重复的次数不超过两次,则无法消除该值?如果我理解第二个数组
0.3,0.4,0.2,0.5.0.3
?您应该描述您为解决此任务所做的工作。哪些工作和哪些工作不起作用。通过这种方式,其他用户可以更好地帮助您在发布任务之前进行基础研究。谢谢你的理解