2016-12-26 103 views
4

我有兩個相同長度的列表。一個代表實際值,另一個代表某種質量值。根據質量閾值(4),我想用其他值替換這些值(第17頁)。我的方法是用enumerate迭代質量以獲取索引並將值替換爲某個索引。根據其他列表的值替換列表中的值?

有沒有更好的方法來做到這一點?

import numpy as np 

values = np.array([4, 4, 4, 4, 4, 4, 4, 4, 4, 4]) 
quality = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

threshold = 4 
value = 17 

for i, qual in enumerate(quality): 
    if qual < threshold: 
     values[i] = value 

# [17 17 17 17 4 4 4 4 4 4] 
print(values) 

回答

3

您可以與模板陣列的工作,並在boolean indexing

values[quality < threshold] = value 

應該做的伎倆沒有迭代:

import numpy as np 

values = np.array([4, 4, 4, 4, 4, 4, 4, 4, 4, 4]) 
quality = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

threshold = 4 
value = 17 

values[quality < threshold] = value 

print(values) # array([17, 17, 17, 17, 4, 4, 4, 4, 4, 4]) 
+0

哇,這太酷了。我在其他地方使用過,但認爲它只適用於相同的陣列。謝謝! – ppasler