python - 使用矢量化加速计算

标签 python numpy vectorization slice

我是Python新手,所以我的计算效率存在一些问题。 我使用此代码来填充我的 H 矩阵和 h 向量(x_tr、x_te 和 c 是列表):

for l in xrange(0, b):
    for ls in xrange(0, b):
        H[l][ls] = 1.0/n_tr * numpy.sum([numpy.exp(-((numpy.linalg.norm(x_tr[i]-c[l])**2 + numpy.linalg.norm(x_tr[i]-c[ls])**2)/(2*s**2))) for i in range(0, n_tr)])
    h[l] = 1.0/n_te * numpy.sum([numpy.exp(-((numpy.linalg.norm(x_te[j]-c[l])**2)/(2*s**2))) for j in range(0, n_te)])

我认为使用 2 个循环可能效率低下...有什么简单的方法可以加快我的计算速度吗?有人告诉我,我可以使用矢量化,但我不知道它是如何工作的

感谢您的帮助:)

最佳答案

矢量化示例:

>>> x_te = np.arange(10)
>>> c = np.range(5)
>>> (x_te[:,None] - c).sum(axis=0)
array([45, 35, 25, 15,  5])

相当于:

np.array([np.sum(xte[i]-c[j] for i in range(xte.size)) for j in range(c.size)])

也就是说:

as x_te[j]c[l] 是循环中的两个标量,您的 np.linalg.norm(x[j]-c [i])**2 只是 (x[j]-c[i]),对吗?所以你的 h 可以计算为

h = 1.0/n_te * numpy.sum([numpy.exp(-(x_te[: None]-c))/(2*s**2))) 

这应该让你开始学习H...

编辑您可能应该检查一些documentation on broadcasting .

关于python - 使用矢量化加速计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598189/

相关文章:

multithreading - 为什么鼓励 Julia 中的去向量化?

python - 在 python 中询问一个数字是否确实存在并且在 python 中未被屏蔽的方法是什么

python - 行是 3 个最新值的总和

python - 基于位置向量聚合元素

python - 如何加快将数据帧导入 pandas 的速度

python - 使用 numpy 交换数组中一定比例的元素

python-3.x - 修复了从PIL图像到OpenCV Mat的低效图像转换

python - 如何向量化这个矩阵运算?

python - 在 cython 中向量化具有两个数组作为输入的类的函数

python - SciPy (Python) 中的最小化函数接受什么大小的参数?