python - numpy/python 中的矢量替换

标签 python arrays python-3.x numpy vector

<分区>

给定两个向量 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)

关于python - numpy/python 中的矢量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50913499/

相关文章:

python - 行数递增的 Numpy 矩阵初始化

python - 为什么 (0>1 + 0>9) 返回 False,而 ((0>1) + (0>9)) 返回 0?

arrays - SwiftUI 复选标记单行

arrays - Ruby 将修改后的数组保存在变量中而不更改原始数组

Python:将索引作为新列添加到二维数组

django - 如何使用 django 使用 datefield 检索数据?

python-3.x - 在 anaconda 中找不到 pptk 的匹配分布

python - 如何删除不是数字的列表项?

javascript - 数组 : how to push all elements forward by one with javascript 中的数组

python - 将文件从存储桶移动到另一个存储桶/文件夹