【发布时间】:2014-08-02 19:30:09
【问题描述】:
我编写了一些代码来根据列表中的 n 个项目计算 n 个矩阵,然后在最后将所有矩阵相乘。
代码比较慢,想了解更多关于python优化的知识。我使用了分析工具并确定我的程序中的减速是这个矩阵乘法循环。
我想知道是否有人对我如何加快速度有任何建议,也许可以利用 Python / NumPy 中基于 C 的内置函数?
def my_matrix(x):
# Initialise overall matrix as an identity matrix
# | M_11 M_12 |
# | M_21 M_22 |
M = np.matrix([[1, 0],[0, 1]])
for z in z_all:
param1 = func1(z)
param2 = func2(x, z)
param3 = func3(x, z)
M_11 = param1 + param2
M_12 = param1 - param2
M_21 = param1 * param2
M_22 = param1 / param2
# Multiply matrix with overall master matrix
M = M * np.matrix([[M_11, M_12],[M_21, M_22]])
return M
从一点背景阅读来看,函数调用的计算成本似乎很高,因此,为我的参数计算数组然后访问数组可能比每次在循环中评估函数更有效......例如
param1s = funcs(z_all)
param2s = funcs(x, z_all)
etc
然后在for循环中:
for i, z in enumerate(z_all):
param1 = params1[i]
param2 = params2[i]
etc.
这更快,但只有大约 10%,因为通过在循环中使用 param1 = params1[i] 进行数组访问所花费的时间抵消了更少的函数调用所节省的时间。
请问大家有什么推荐的吗?
【问题讨论】:
-
您的任何参数/变量是否在整个循环中保持不变?如果是这种情况,您可以在循环之前定义它,从而避免反复运行该函数。
标签: python optimization numpy matrix matrix-multiplication