【发布时间】:2015-03-02 00:11:25
【问题描述】:
我写了一个函数来计算矩阵中每一列对的联合熵。但我想提高时间和内存方面的性能。
函数如下所示:
function jointentropy(aln)
mat = Array(Float64,size(aln,2),size(aln,2))
for i in combinations(1:size(aln,2),2)
a = i[1]
b = i[2]
mina, maxa = extrema(aln[:,a])
minb, maxb = extrema(aln[:,b])
h = Array(Float64,(maxa-mina+1,maxb-minb+1))
h = hist2d([aln[:,a] aln[:,b]],mina-1:1:maxa,minb-1:1:maxb)[3]
h = h/size(aln[:,1],1)
I,J,V = findnz(h)
l = sparse(I,J,log2(V),maxa-mina+1,maxb-minb+1)
mat[b,a] = - sum(l.*h)
end
return mat
end
进入此函数的矩阵如下所示:
rand(45:122,rand(1:2000),rand(1:2000))
一个 500x500 矩阵的示例导致以下 @time 输出:
elapsed time: 33.692081413 seconds (33938843192 bytes allocated, 36.42% gc time)
...这似乎是一大堆内存...
关于如何加快此功能并减少内存分配的任何建议?
提前感谢您的帮助!
【问题讨论】:
标签: performance julia entropy