2017-11-28 6 views
1

私は値new_df.valuesnumpyの等しい適切

arr = np.array([[ 0.  , 0.31652875, 0.05650486, 0.11726623, 0.30987541, 
    0.30987541, 0.30987541], 
    [ 0.31652875, 0.  , 0.34982559, 0.33382917, 0.00799828, 
    0.00799828, 0.00799828], 
    [ 0.05650486, 0.34982559, 0.  , 0.07718834, 0.34384549, 
    0.34384549, 0.34384549], 
    [ 0.11726623, 0.33382917, 0.07718834, 0.  , 0.32917553, 
    0.32917553, 0.32917553], 
    [ 0.30987541, 0.00799828, 0.34384549, 0.32917553, 0.  , 
    0.  , 0.  ], 
    [ 0.30987541, 0.00799828, 0.34384549, 0.32917553, 0.  , 
    0.  , 0.  ], 
    [ 0.30987541, 0.00799828, 0.34384549, 0.32917553, 0.  , 
    0.  , 0.  ]]) 

とのデータフレームを持っていると私はarr == min_arrnp.isclose(arr,min_arr)私が手に私がすなわち

# new_df[new_df != 0].min().values this is want was used to get this 

min_arr = np.array([ 0.05650486, 0.00799828, 0.05650486, 0.07718834, 0.00799828, 
    0.00799828, 0.00799828]) 

などのゼロ以外の分を見つけました:

array([[False, False, True, False, False, False, False], 
     [False, False, False, False, True, True, True], 
     [ True, False, False, True, False, False, False], 
     [False, False, False, False, False, False, False], 
     [False, True, False, False, False, False, False], 
     [False, True, False, False, False, False, False], 
     [False, True, False, False, False, False, False]], dtype=bool) 

すべてが正常に動作していますが、4番目の行は正常ではありません。理由を知ることができますか?これのための回避策はありますか?

+2

'np.isclose'を使用してください。 – Divakar

+0

@Divakarなぜnp.iscloseでまだ成功しているのかわかりません。それは私のコンピュータの中だけですか? – Dark

+0

あなたはどのようにその結果を使用しているのかを表示しますか? – Divakar

答えて

1

ブロードキャストの最小単位の形状をnp.isclose以内に拡張する必要があるようです。 [:, None]がなければ、4番目の行で同じ問題が発生します。

arr[arr == 0] = np.nan 
mins = np.nanmin(arr, axis=1) 
print(np.isclose(arr, mins[:, None])) # need to expand dim/newaxis 

[[False False True False False False False] 
[False False False False True True True] 
[ True False False False False False False] 
[False False True False False False False] 
[False True False False False False False] 
[False True False False False False False] 
[False True False False False False False]] 

なぜエラー:あなただけ1D minsを使用する場合、あなたが行に沿って要素ごとに比較しています。混乱する部分は、実際には1つのセルを除いて、比較が目的のソリューションによく似ているということです。

あなたが望むものではないよう
arr[0] == mins 

:例えば

は、新しい軸に展開せずに、最初の行の比較は次のようになります。