这是一个简单的问题,我看不出更好的答案,也许其他人可以!以下是代码:
示例变量
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));需要重新整理的感觉是错误的,但我想不出有什么办法可以避免它。
实际上,我正在增加^数据,而且我真的不想循环遍历这两个维度(sims或data行)。虚拟数据可以按我选择的任何方式排序,但是值输出必须是nSim的nRow矩阵。
任何想法都欢迎。谢谢。
发布于 2014-10-23 10:00:44
您真的不需要使用那个repmat。你可以像这样直接从data中输入“子矩阵”-
increaseFactors = bsxfun(@power, basis.increaseRate, data(:,1:4,:));bsxfun内部负责singleton维度的扩展,在本例中,这是data的第一个维度(行)。因为basis.increaseRate有nSim行,data(:,1,4,:)有一行,所以它将被展开为具有相同数目的行,即nSim,从而在内部完成爬虫/扩展的工作。
其余代码保持不变。
https://stackoverflow.com/questions/26525514
复制相似问题