【发布时间】:2014-10-08 10:21:01
【问题描述】:
我有一个 192x256x192 的单元格,其中每个单元格都是一个 13 条目长的向量。我的任务是在每张地图中创建 192 个 192x256 方格的热图。每个正方形的值应该是作为 13 条目长向量的指数拟合的 b 值。
即Cell{:,:,1} 是一个图像。单元格{1,1,1} 表示像素随时间经历的 13 次强度变化。我想制作 192 个热图,其中热图上的每个点都是指数拟合的 b 值,以适应像素随时间的强度变化。
我有一些代码(见下文),但我不是一个优秀的程序员,它运行得非常慢。有人对这样做的替代方法有建议吗?或有关此主题的建议。
谢谢。
ExpHeatMap = zeros(192,256,192);
t = 1:13;
ft=fittype('exp1');
for i = 1:192
for j = 1:256
for k = 1:192
testArray = HeatMapValues{k,j,i}(1:end);
numZeros = find(testArray == 0);
if numZeros > 10
ExpHeatMap(k,j,i) = 0;
else
cf = fit(t',HeatMapValues{k,j,i}',ft);
ExpHeatMap(k,j,i) = cf.b;
end
end
end
end
【问题讨论】:
-
您可以使用 cellfun mathworks.co.uk/help/matlab/ref/cellfun.html 加速它
-
只有两个小技巧。首先,
testArray中的最后一个索引是不必要的,即testArray = HeatMapValues{k,j,i};。其次,我认为你可以把对find的调用改成numZeros = find(testArray == 0, 1, 'first');。 -
ExpHeatMap(k,j,i) = 0;行由于预分配而冗余。 -
this solution 对这个问题有什么好处吗?
标签: performance matlab indexing heatmap cell-array