【发布时间】:2017-12-06 03:41:53
【问题描述】:
我一直在尝试找出处理包含变量的二维数组(即矩阵)的最有效方法。 我通过连接较小的数组来构造一个大矩阵,并用一个变量加权。作为一个简化的例子,这就是我目前所做的。
function myMatrix(x::Float64)
M = vcat(hcat(x*A, C), hcat(C, 2*x*B))
return M
end
const A = ones(2,2)
const B = ones(2,2)
const C = zeros(2,2)
y_values = collect(0:0.01:10)
for y in y_values
eivals, eivecs = eig(myMatrix(y))
dosomething(eivals,eivecs)
end
问题:我有更多(和更复杂的非对角线)矩阵,最终大小非常大。此刻,我调用了这个函数几百次。有没有人建议如何使这个过程在运行时更有效?
提前致谢
【问题讨论】:
-
撇开核心问题不谈,这将非常缓慢,因为您在
myMatrix中使用了非常量全局变量,这是(我认为)性能提示中的第一个禁忌官方文档的部分。 -
谢谢,我改了。
-
我应该提一下,在我的原始程序中,矩阵实际上取决于代码的一些早期部分,特别是一些输入参数(每次程序运行都设置一次)。但是,我遵循了那里的性能提示并将它们声明为全局。
-
制作一个预分配版本,您可以在其中更改传入的某些输出变量的值,而不是每次都创建一个新矩阵。
-
我不确定我理解你的意思,你能具体说明一下吗?
标签: arrays performance julia