繁体   English   中英

如何在Python / Numpy中将值打印到新数组中该数组先前值的范围内

[英]How to print a value to a new array if it within a bound of previous value in that array in Python/Numpy

如果我有一个数组:

StartArray=np.array([1, 2, 3, 1.4, 1.2, 0.6, 1.8, 1.5, 1.9, 2.2, 3, 4 ,2.3])

我想遍历从StartArray [0]开始的此数组,并且只保留最后保留值的+/- .5范围内的值以产生:

EndArray=[1, 1.4, 1.2, 1.5, 1.9, 2.2, 2.3]

这是我到目前为止尝试过的,结果没有意义

StartArray=np.array([1, 2, 3, 1.4, 1.2, 0.6, 1.8, 1.5, 1.9, 2.2, 3, 4 ,2.3])
EndArray=np.empty_like(StartArray)
EndArray[0]=StartArray[0]
for i in range(len(StartArray)-1):
    if EndArray[i]+.5>StartArray[i+1]>EndArray[i]-.5:
        EndArray[i+1]=StartArray[i+1]

Out:
array([ 1.        ,  0.22559146,  0.13015365,  5.24910493,  0.63804761,
    0.6       ,  1.73143364,  1.5       ,  1.9       ,  2.2       ,
    6.82525036,  0.61641556,  6.82325036])

List是完成这项工作的良好结构:

StartArray=np.array([1, 2, 3, 1.4, 1.2, 0.6, 1.8, 1.5, 1.9, 2.2, 3, 4 ,2.3])
ref=StartArray[0]
End=[]
for x in StartArray:
    if abs(x- ref)<.5:
      End.append(x)
      ref=x
print(np.array(End))      

[ 1.   1.4  1.2  1.5  1.9  2.2  2.3]    

您的方法存在多个问题。 首先,您将EndArray初始化为与StartArray相同的大小,但这并不是您想要的期望输出。 而是将EndArray初始化为空列表,并通过StartArray EndArray作为循环。 其次,您希望输出值在最后保存的值的0.5以内,因此您需要对此进行跟踪。

修改您的代码:

StartArray=np.array([1, 2, 3, 1.4, 1.2, 0.6, 1.8, 1.5, 1.9, 2.2, 3, 4 ,2.3])
EndArray=[]

last_kept = StartArray[0]
EndArray.append(last_kept)
for i in range(len(StartArray)-1):
    if np.abs(StartArray[i+1] - last_kept) < 0.5:
        last_kept = StartArray[i+1]
        EndArray.append(last_kept)

# convert back to numpy array
EndArray = np.array(EndArray)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM