1

我有 2 个数组,为简单起见,假设原始数组是一组随机数字:

import numpy as np
a=np.random.rand(N)

然后我从这个数组中采样并打乱一个子集:

b=np.array()  <------size<N

改组我不存储索引值,所以 b 是 a 的无序子集

有没有一种简单的方法来获取 b 的原始索引,所以它们与 a 的顺序相同,例如,如果 b 的元素 2 在 a 中具有索引 4,则创建一个其分配的数组。

我可以逐个元素地使用 for 循环检查,但也许有一种更 Pythonic 的方式

谢谢

4

2 回答 2

2

我认为计算效率最高的做法是跟踪b与创建时关联a的索引。b

例如,不是采样,而是对a的索引进行采样a

indices = random.sample(range(len(a)), k)   # k < N
b = a[indices]
于 2012-10-24T22:42:25.350 回答
0

如果a碰巧已排序,您可以执行以下操作:

>>> from numpy import array
>>> a = array([1, 3, 4, 10, 11])
>>> b = array([11, 1, 4])
>>> a.searchsorted(b)
array([4, 0, 2])

如果a未排序,您可能最好使用@unutbu 的答案之类的东西。

于 2012-10-25T05:47:01.680 回答