【问题标题】:Numpy equal to not working properlyNumpy等于不能正常工作
【发布时间】:2017-11-28 16:13:45
【问题描述】:

我有一个数据框,其值为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.        ]])

我找到了除零以外的最小值,比如 i.e

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

一切正常,但不是第四行。我可以知道为什么吗?有什么解决方法吗?

【问题讨论】:

  • 使用np.isclose
  • @Divakar 我不知道为什么 np.isclose 仍然没有成功。它只在我的电脑里吗?
  • 展示你是如何使用它的以及结果?
  • @Divakar 更新
  • 就像在pandas中使用eq一样,如果不指出轴会收到错误的结果new_df.eq(new_df[new_df != 0].min(),0)

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


【解决方案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

这似乎不是你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2021-03-17
    • 2013-03-30
    • 2010-11-30
    • 2021-10-02
    • 2017-08-06
    • 2013-11-22
    相关资源
    最近更新 更多