【发布时间】:2014-05-27 14:20:31
【问题描述】:
这个问题与this one 密切相关。有人可以说它可以通过np.lexsort 或在np.recarray 上排序来解决,但不是以一种琐碎和pythonic 的方式。
我有一个 numpy 数组,例如这个:
array([[[ 2, 7, 1],
[ 35, 9, 1],
[ 22, 12, 4]],
[[ 12, 2, 3],
[ 3, 7, 8],
[ 12, 1, 10]]])
我很想把它作为输出:
array([[[ 2, 7, 1],
[ 22, 12, 4],
[ 35, 9, 1]],
[[ 3, 7, 8],
[ 12, 1, 10],
[ 12, 2, 3]]])
也就是说,根据每个内部数组的第一个、第二个和第三个值对它们进行排序。请注意,我不想按列排序(没有类似表格的排序)。这是不想要的:
array([[[ 2, 7, 1],
[ 22, 9, 1],
[ 35, 12, 4]],
[[ 3, 1, 3],
[ 12, 2, 8],
[ 12, 7, 10]]])
换句话说,我想要的是np.sort_complex,但对于更高维复杂的类型。
对我来说,更明智的方法是从我的 3D 数组中创建一个np.recarray。问题是我不知道如何以便宜的方式做到这一点。您将如何快速转换此处显示的数组之一:
array([[( 2, 7, 1),
( 35, 9, 1),
( 22, 12, 4)],
[( 12, 2, 3),
( 3, 7, 8),
( 12, 1, 10)]], dtype=???)
具有正确的 dtype ([("c1", "f8"), ("c2", "f8"), ("c3", "f8")]-like 但考虑到更高的维度)?
np.lexarray 对高维数组的行为非常奇怪,我无法让它工作。
np.argsort 也不是答案,因为它的排序方式不稳定(没有“抽奖”总是第一、第二和第三)。
我在纯 python 中提出了一个非常缓慢的“解决方案”,还有其他想法吗?
【问题讨论】:
标签: python arrays sorting numpy