2016-12-26 11 views
4

私は同じ長さの2つのリストを持っています。 1つは実際の値を表し、もう1つは品質値を表します。品質閾値(4)に応じて、値を他の値(p.e. 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

関連する問題