【发布时间】:2010-01-06 22:33:54
【问题描述】:
这在 1 维中效果很好:
# This will sort bar by the order of the values in foo
(Pdb) bar = np.array([1,2,3])
(Pdb) foo = np.array([5,4,6])
(Pdb) bar[np.argsort(foo)]
array([2, 1, 3])
但是我如何在二维中做到这一点? Argsort 运行良好,但 select 不再起作用:
(Pdb) foo = np.array([[5,4,6], [9,8,7]])
(Pdb) bar = np.array([[1,2,3], [1,2,3]])
(Pdb) bar[np.argsort(foo)]
*** IndexError: index (2) out of range (0<=index<=1) in dimension 0
(Pdb)
我希望这个输出:
array([[2, 1, 3], [3, 2, 1]])
有什么办法吗?
谢谢! /YGA
编辑:take() 似乎做了正确的事情,但它实际上只取第一行的元素(超级混乱)。
如果我改变 bar 的值,你可以看到:
(Pdb) bar = np.array([["1","2","3"], ["A", "B", "C"]])
(Pdb) bar.take(np.argsort(foo))
array([['2', '1', '3'],
['3', '2', '1']],
dtype='|S1')
(Pdb)
【问题讨论】:
-
bar[[[0],[1]], np.argsort(foo)]似乎可以做你想做的事。 -
@Alok:是的,但是这个策略在一个更复杂的例子上似乎失败了(我也不得不说我觉得它有点神秘)。
-
@YGA:你能告诉我们这个复杂的例子是什么吗?如果您愿意,我将在今天晚些时候更详细地解释该方法。