如何正确使用 argmin 的结果来切出最小值数组?
how do I properly use the result of argmin to slice out an array of the minimums?
我想沿着数组的第一个轴切出最小值。
例如,在下面的代码中,我想打印出 np.array([13, 0, 12, 3])
。
但是,切片的行为并不像我想象的那样。
(我稍后确实需要 argmin 数组,不想只使用 np.min(g, axis=1)
)
import numpy as np
g = np.array([[13, 23, 14], [12, 23, 0], [39, 12, 92], [19, 4, 3]])
min_ = np.argmin(g, axis=1)
print(g[:, min_])
这里发生了什么?
为什么我的代码结果是
[[13 14 23 14]
[12 0 23 0]
[39 92 12 92]
[19 3 4 3]]
其他详情:
Python3.10.2
麻木 1.22.1
您的代码按顺序打印 g
数组的第一、第三、第二和第三列。
>>> np.argmin(g, axis=1)
array([0, 2, 1, 2]) # first, third, second, third
如果要获取每一行的最小值,使用np.min
:
>>> np.min(g, axis=1)
array([13, 0, 12, 3])
当您写 g[:, min_]
时,您是在说:“给我 所有行 (shorthand :
) 索引处的列 min_
(即0, 2, 1, 2
)”。
你想说的是:“给我 这些行和这些列 的值” - 换句话说,你缺少相应的 行索引 以匹配 min_
.
中的列索引
由于您所需的行索引只是从 0
到 g.shape[0] - 1
的数字范围,从技术上讲,您可以将其写为:
print(g[range(g.shape[0]), min_])
# output: [13 0 12 3]
但如果您的目标是提取 row-wise 最小值,@richardec 的解决方案总体上更好。
如果你想使用np.argmin
,你可以试试这个:
更多解释: 来自 min_
你有 array([0, 2, 1, 2])
但是为了访问数组你需要 ((0, 1, 2, 3), (0, 2, 1, 2))
因为这个原因你可以使用range
.
min_ = np.argmin(g, axis=1)
g[range(len(min_)), min_] # like as np.min(g ,axis=1)
输出:
array([13, 0, 12, 3])
我想沿着数组的第一个轴切出最小值。
例如,在下面的代码中,我想打印出 np.array([13, 0, 12, 3])
。
但是,切片的行为并不像我想象的那样。
(我稍后确实需要 argmin 数组,不想只使用 np.min(g, axis=1)
)
import numpy as np
g = np.array([[13, 23, 14], [12, 23, 0], [39, 12, 92], [19, 4, 3]])
min_ = np.argmin(g, axis=1)
print(g[:, min_])
这里发生了什么? 为什么我的代码结果是
[[13 14 23 14]
[12 0 23 0]
[39 92 12 92]
[19 3 4 3]]
其他详情:
Python3.10.2
麻木 1.22.1
您的代码按顺序打印 g
数组的第一、第三、第二和第三列。
>>> np.argmin(g, axis=1)
array([0, 2, 1, 2]) # first, third, second, third
如果要获取每一行的最小值,使用np.min
:
>>> np.min(g, axis=1)
array([13, 0, 12, 3])
当您写 g[:, min_]
时,您是在说:“给我 所有行 (shorthand :
) 索引处的列 min_
(即0, 2, 1, 2
)”。
你想说的是:“给我 这些行和这些列 的值” - 换句话说,你缺少相应的 行索引 以匹配 min_
.
由于您所需的行索引只是从 0
到 g.shape[0] - 1
的数字范围,从技术上讲,您可以将其写为:
print(g[range(g.shape[0]), min_])
# output: [13 0 12 3]
但如果您的目标是提取 row-wise 最小值,@richardec 的解决方案总体上更好。
如果你想使用np.argmin
,你可以试试这个:
更多解释: 来自 min_
你有 array([0, 2, 1, 2])
但是为了访问数组你需要 ((0, 1, 2, 3), (0, 2, 1, 2))
因为这个原因你可以使用range
.
min_ = np.argmin(g, axis=1)
g[range(len(min_)), min_] # like as np.min(g ,axis=1)
输出:
array([13, 0, 12, 3])