Numpy等于不能正常工作

时间:2017-11-28 16:13:46

标签: python-3.x pandas numpy equals-operator

我的数据框的值为new_df.values

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.        ]])

我发现除了零之外的分钟就像是

# 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])

当我arr == min_arrnp.isclose(arr,min_arr)时,我得到:

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)

一切正常,但不是第四排。我可以知道为什么吗?这有什么工作吗?

1 个答案:

答案 0 :(得分: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时,您将沿着行比较元素。令人困惑的部分是,这种比较实际上看起来很像你想要的解决方案,除了一个单元格。

例如,如果不扩展到新轴,第一行的比较将如下所示:

arr[0] == mins

这似乎不是你想要的。