Numpy 等于不能正常工作
Numpy equal to not working properly
我有一个包含值 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_arr
和 np.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
内扩大广播的最小值形状。如果没有 [:, 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
这似乎不是你想要的。
我有一个包含值 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_arr
和 np.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
内扩大广播的最小值形状。如果没有 [:, 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
这似乎不是你想要的。