按给定索引列表重新排序 Numpy 数组

问题描述 投票:0回答:1

我有一个索引数组:

test_idxs = np.array([4, 2, 7, 5])

我还有一个值数组(更长):

test_vals = np.array([13, 19, 31, 6, 21, 45, 98, 131, 11])

所以我想获取一个具有索引数组长度的数组,但值数组中的值按索引数组的顺序排列。换句话说,我想要得到这样的东西:

array([21, 31, 131, 45])

我知道如何在循环中执行此操作,但我不知道如何使用 Numpy 工具来实现此目的。

python numpy
1个回答
1
投票

这实际上对于 numpy 来说非常简单,只需用

test_vals
索引你的
test_idx
数组(整数数组索引):

out = test_vals[test_idxs]

输出:

array([ 21,  31, 131,  45])

请注意,这要求索引有效。如果您的索引可能太高,您需要明确地处理它们。

示例:

test_idxs = np.array([4, 2, 9, 5])
test_vals = np.array([13, 19, 31, 6, 21, 45, 98, 131, 11])

out = np.where(test_idxs < len(test_vals),
               test_vals[np.clip(test_idxs, 0, len(test_vals)-1)],
               np.nan)

输出:

array([21., 31., nan, 45.])
© www.soinside.com 2019 - 2024. All rights reserved.