我有以下NumPy矩阵:
m = np.array([[1, 2, 3, 4],
[10, 5, 3, 4],
[12, 8, 1, 2],
[7, 0, 2, 4]])
现在,我需要这个矩阵中每一行的N(例如,N=2)最低值的指数。因此,通过上面的示例,我期望得到以下输出:
[[0, 1],
[2, 3],
[3, 2],
[1, 2]]
其中,输出矩阵的行对应于原始矩阵的各个行,输出矩阵的行的元素是对应原始行中N个最低值的索引(最好是按原始矩阵中的值进行升序)。我怎么能在NumPy里做这件事?
发布于 2022-10-14 23:40:02
您可以使用简单的循环方法(不推荐),也可以使用np.argpartition
。
In [13]: np.argpartition(m, 2)[:, :2]
Out[13]:
array([[0, 1],
[2, 3],
[2, 3],
[1, 2]])
发布于 2022-10-14 23:39:38
您可以在数组上使用np.argsort,然后将数组分割为N个最小/最高值。
np.argsort(m, axis=1)[:, :2]
array([[0, 1],
[2, 3],
[2, 3],
[1, 2]], dtype=int64)
发布于 2022-10-14 23:39:48
试试这个;
import numpy as np
m = np.array([[1, 2, 3, 4],
[10, 5, 3, 4],
[12, 8, 1, 2],
[7, 0, 2, 4]])
for arr in m:
print(arr.argsort()[:2])
https://stackoverflow.com/questions/74077540
复制相似问题