给定两个向量 v=['a','b','c']
和 i=np.random.randint(len(v),size=10)
,我可以得到“代入”向量
vi = [v[i[x]] for x in range(len(i))]
例如,vi
是
['a', 'a', 'c', 'c', 'b', 'a', 'c', 'a', 'c', 'a']
如果
i = array([0, 0, 2, 2, 1, 0, 2, 0, 2, 0])
是否有针对此的向量化操作?
您可以简单地使用 numpy 索引(请注意,您需要将 v
转换为 numpy.array
才能工作):
v = np.array(['a','b','c'])
i = np.random.randint(len(v),size=10)
>>> v[i]
array(['c', 'b', 'a', 'b', 'c', 'b', 'a', 'a', 'b', 'b'], dtype='<U1')
时间
In [26]: i = np.random.randint(len(v),size=1000000)
In [27]: %timeit [v[i[x]] for x in range(len(i))]
554 ms ± 6.41 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [28]: %timeit v[i]
4.85 ms ± 12.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [29]: %timeit [v[s] for s in i]
505 ms ± 1.95 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)