如何根据python中的特定值将数组拆分为多个数组
假设我有一个随机值数组。在数组中有一个值接近0,但不是0,它在随机位置连续重复。我要做的是找到这些值,并在这个位置将数组拆分为多个数组,同时删除重复的值。限制是,如果连续重复的次数不超过两次,则无法消除该值 例如:如何根据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
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
?您应该描述您为解决此任务所做的工作。哪些工作和哪些工作不起作用。通过这种方式,其他用户可以更好地帮助您在发布任务之前进行基础研究。谢谢你的理解