2016-09-01 4 views
0

ローカルの最大値を検出するためにscipyのmaximum_filterを使用したいが、1つの問題がある。フィルタがすべて等しい値に関数を適用すると、それらはすべてローカル極大値として返されますが、逆の方法でそれらを持つ必要があります。すべての等価値に対する最大フィルタのフィルタリング

スクリプトの例:

import numpy as np 
import scipy.ndimage as sc 

ones_matrix = np.ones((6,6)) 

max_arr = (ones_matrix == sc.maximum_filter(ones_matrix, 3, mode = 'constant')) 
print max_arr 

これは、すべてのTrueを返しますが、私は彼らが偽必要があります。どうやってやるの?前もって感謝します!このいずれかの

max_arr = (ones_matrix == sc.maximum_filter(ones_matrix, 3, mode = 'constant')) 

[[ True True True True True True] 
[ True True True True True True] 
[ True True True True True True] 
[ True True True True True True] 
[ True True True True True True] 
[ True True True True True True]] 
+1

を何 'max_arr =(ones_matrix = sc.maximum_filter(ones_matrix、3、モードを使用について! = '定数')) '? – BPL

+0

'scipy.ndimage.maximum_filter'を実行するのではなく、行列のすべての値が等しく、したがって' False'を返す場合に特別なケースを追加できますか?私はscipyが "正しい"ことをしていると思う。 – Frangipanes

+0

これはおそらく助けることができますか? http://stackoverflow.com/questions/14859458/how-to-check-if-all-values-in-the-columns-of-a-numpy-matrix-are-the-same – Frangipanes

答えて

1

あなたの文を変更することができ

max_arr = (ones_matrix != sc.maximum_filter(ones_matrix, 3, mode = 'constant')) 
関連する問題