sds*_*sds 2 python arrays numpy vector python-3.x
由于两个矢量v=['a','b','c']和i=np.random.randint(len(v),size=10),我可以得到"替代"矢量
vi = [v[i[x]] for x in range(len(i))]
Run Code Online (Sandbox Code Playgroud)
例如,vi是
['a', 'a', 'c', 'c', 'b', 'a', 'c', 'a', 'c', 'a']
Run Code Online (Sandbox Code Playgroud)
如果
i = array([0, 0, 2, 2, 1, 0, 2, 0, 2, 0])
Run Code Online (Sandbox Code Playgroud)
这是否有矢量化操作?
您可以简单地使用numpy索引(请注意,您需要转换v为a 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')
Run Code Online (Sandbox Code Playgroud)
计时
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |