优化python / numpy中的矩阵写入

用户491880

我目前正在尝试优化一段代码,其依据是我们计算并计算一堆值并将其写入矩阵。计算顺序无关紧要:

mat =  np.zeros((n, n))
mat.fill(MAX_VAL)
for i in xrange(0, smallerDim):
    for j in xrange(0,n):
        similarityVal = doACalculation(i,j, data, cache)
        mat[i][j] = abs(1.0 / (similarityVal + 1.0))

我分析了这段代码,发现大约90%的时间都花在了将值写回到矩阵中(最后一行)

我想知道进行这种类型的计算以优化写入的最佳方法是什么。我应该写入中间缓冲区并复制整行等吗?对于性能调优或numpy内部结构我还是一无所知。

编辑:doACalculation不是没有副作用的函数。它接收一些数据(假设这是一些python对象),还接收其写入和读取一些中间步骤的缓存。我不确定是否可以轻松将其向量化。我尝试按照建议使用numpy.vectorize,但没有发现天真的for循环有明显的提速。(我通过状态变量传入了其他数据):

user2357112支持Monica

如果可以向量化doACalculation,任务将变得容易:

similarityArray = doACalculation(np.indices((smallerDim, n)))
mat[:smallerDim] = np.abs(1.0 / (similarityArray + 1))

假设您进行了doACalculation正确的矢量化处理,这至少应至少快一个数量级通常,在使用NumPy数组时,您希望尽可能避免显式循环和元素访问。

作为参考,一个可能的矢量化示例doACalculation

# Unvectorized
def doACalculation(i, j):
    return i**2 + i*j + j

# Vectorized
def doACalculation(input):
    i, j = input
    return i**2 + i*j + j

# Vectorized, but with the original call signature
def doACalculation(i, j):
    return i**2 + i*j + j

是的,最后一个版本实际上应该与未向量化的功能相同。有时候就是那么容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

优化python / numpy中的矩阵写入

来自分类Dev

在Python / Numpy中优化许多矩阵运算

来自分类Dev

优化代码以遍历python中的矩阵

来自分类Dev

在Python中优化了对FS的写入

来自分类Dev

Python中的随机优化

来自分类Dev

优化Python中的树

来自分类Dev

Python中的搜索优化

来自分类Dev

优化Python中的树

来自分类Dev

Python中过滤的优化

来自分类Dev

在Python / Numpy中优化数组元素移位

来自分类Dev

在python中优化Double Loop

来自分类Dev

Python中的替代密码优化

来自分类Dev

在Python中优化列表创建

来自分类Dev

优化 Python 中的长 if 语句

来自分类Dev

如何在python中优化对矩阵的数学运算

来自分类Dev

优化从 Python 中的列表写入多个 CSV 文件

来自分类Dev

Python / Cython / Np.nonzero的Numpy优化

来自分类Dev

曲线拟合优化scipy python numpy

来自分类Dev

关于python中的numpy矩阵的问题

来自分类Dev

使用 numpy 在 python 中迭代矩阵

来自分类Dev

Python:优化删除在numpy数组中未对齐的元素

来自分类Dev

Python:优化删除在numpy数组中未对齐的元素

来自分类Dev

在Python中:如何将稀疏矩阵写入csv文件?

来自分类Dev

在Python中优化集合理解

来自分类Dev

Python中的翻译器优化

来自分类Dev

代码优化-Python中的函数调用次数

来自分类Dev

解决Python中图形的多目标优化

来自分类Dev

Python中是否有all(map(...))优化?

来自分类Dev

Python中的数据局部性优化