如何从包含最多 3 个值的 2d numpy 数组中获取列的索引
How to get index of columns from 2d numpy array containing max 3 values
我有一个数组:
a = np.array([[22,11,44,33,66],
[22,11,2,1,66],
[1,11,44,22,4],
[22,11,88,99,66]])
作为输出,我想要一个包含最大 3 个值的索引的数组作为二维数组。例如,上面的数组输出为:
array([[4,2,3],
[4,0,1],
[2,3,1],
[3,2,4]])
要获取数组的顶部 k
个元素,partition 它。由于分区通常会为您提供 k
个最低元素,因此请使用反向索引:
k = 3
top = np.argpartition(a, -k, axis=1)[:, -k:]
如果您需要按降序对索引进行排序,请使用 np.argsort
结果:
rows = np.arange(a.shape[0])[:, None]
s = np.argsort(a[rows, top], axis=1)[:, ::-1]
top = top[rows, s]
rows
是确保在使用 top
和 s
进行花式索引时正确选择所有索引所必需的。每行的索引必须反转 ([:, ::-1]
) 才能获得升序。
我有一个数组:
a = np.array([[22,11,44,33,66],
[22,11,2,1,66],
[1,11,44,22,4],
[22,11,88,99,66]])
作为输出,我想要一个包含最大 3 个值的索引的数组作为二维数组。例如,上面的数组输出为:
array([[4,2,3],
[4,0,1],
[2,3,1],
[3,2,4]])
要获取数组的顶部 k
个元素,partition 它。由于分区通常会为您提供 k
个最低元素,因此请使用反向索引:
k = 3
top = np.argpartition(a, -k, axis=1)[:, -k:]
如果您需要按降序对索引进行排序,请使用 np.argsort
结果:
rows = np.arange(a.shape[0])[:, None]
s = np.argsort(a[rows, top], axis=1)[:, ::-1]
top = top[rows, s]
rows
是确保在使用 top
和 s
进行花式索引时正确选择所有索引所必需的。每行的索引必须反转 ([:, ::-1]
) 才能获得升序。