2016-12-26 108 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