Matlab优化查询,避免那个repmat

时间:2014-10-23 09:51:49

标签: matlab bsxfun

这是一个简单的问题,我无法看到更好的答案,也许其他人可以!这是代码:

示例变量

nSim = 3000;
nRow = 10000;
data = zeros(1, 5, nRow);
data (:, 1:4, :) = rand(4, nRow)*0.5; % 4 columns of duration values
data (:, 5, :) = 1000;   % 1 column of actual value
basis.increaseRate   = 1 + (rand(nSim, 4)*0.1);

示例计算

dataWithSim = repmat(data(:, 1:4,:),nSim, 1, 1);    
increaseFactors = bsxfun(@power, basis.increaseRate, dataWithSim);
Values = bsxfun(@times, data(:,5,:), prod(increaseFactors,2));

remat的需要感觉不对,但我无法找到避免它的方法。

有效地我做了增加^数据,我真的不想循环遍历两个维度(simsdata行)。虚拟数据可以按我选择的任何方式排序,但输出的值必须是nSimnRow矩阵。

欢迎任何想法。感谢。

1 个答案:

答案 0 :(得分:3)

您实际上不需要使用repmat。您可以直接从data提供“子矩阵”,如此 -

increaseFactors = bsxfun(@power, basis.increaseRate, data(:,1:4,:));

bsxfun内部负责singleton维度的扩展,在这种情况下,data是第一维(行)。由于basis.increaseRatenSim行且data(:,1,4,:)有一行,因此会将其扩展为具有相同的行数,即nSim,从而完成重组工作/内部扩张。

其余代码保持不变。