簡體   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