在编写以下Matlab代码时:
for ii=1:n
x(ii) = foo( ii ); % foo is some function of ii that cannot be vectorized.
end
Run Code Online (Sandbox Code Playgroud)
我得到以下m-lint警告:
变量
x似乎在每次循环迭代时改变大小
我的问题:
这个问题是不能重复的这一个,因为它与预分配的更一般的问题,而是它的一个特定实例涉及.
我正在做以下事情
for i = 1:m,
index = 0;
for j = 1:n,
index = index+values(i,j)*2^(j-1);
if (j==1)
symbol_chip = chip_values(index+1,:);
else
symbol_chip = [symbol_chip chip_values(index+1,:)];
end
end
end
Run Code Online (Sandbox Code Playgroud)
它告诉我以下内容:
symbol_chip可能会在循环中成长.考虑预先分配速度.
有任何想法吗?
所以我有一个月回报矩阵,形式为1000x300.我想获取返回矩阵中每行的每12列的平均值,以给出年度回报,最终将导致1000x25矩阵.
我将如何在Matlab中执行此操作?
通过一些快速搜索,我相信我可以以某种方式使用重塑函数,但我无法弄清楚如何在我的代码循环中实现它.
到目前为止,这是我的尝试.
for i = 1:25
Strategy1.MeanReturn(:,i) = mean(Data.Return(:,i+1):Data.Return(:,i*12+1));
end
Run Code Online (Sandbox Code Playgroud)
Fyi,+1就在那里,因为我忽略了矩阵的第一列.
但这导致我得到一个单一的NaN值.
在循环的每次迭代中,我正在计算MATLAB矩阵.这些矩阵必须连接在一起以创建一个最终矩阵.在进入循环之前我知道这个最终矩阵的维数,所以我使用'零'函数预先分配矩阵比初始化一个空数组要快,然后在循环的每次迭代中简单地附加子数组.奇怪的是,当我预分配时,我的程序运行得慢得多.这是代码(只有第一行和最后一行不同):
这很慢:
w_cuda = zeros(w_rows, w_cols, f_cols);
for j=0:num_groups-1
% gets # of rows & cols in W. The last group is a special
% case because it may have fewer than max_row_size rows
if (j == num_groups-1 && mod(w_rows, max_row_size) ~= 0)
num_rows_sub = w_rows - (max_row_size * j);
else
num_rows_sub = max_row_size;
end;
% calculate correct W and f matrices
start_index = (max_row_size * j) + 1;
end_index = start_index + num_rows_sub - 1;
w_sub = W(start_index:end_index,:);
f_sub …Run Code Online (Sandbox Code Playgroud)