我有一个索引数组:
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 工具来实现此目的。
这实际上对于 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.])