我想在条件语句下逐行扩展矩阵而不初始化矩阵。在C ++中,我只使用std::vector
和push_back
方法而不在C ++中初始化向量的大小。但是,我想在Matlab中做同样的场景。这是我的伪代码
for i = 1:lengt(data)
if ( condition )
K = [data(1) data(2) i]
end
K
答案 0 :(得分:3)
让我们假设一些工作代码类似于您的伪代码。
%// Original code
for i = 1:10
if rand(1)>0.5
data1 = rand(2,1)
K = [data1(1) data1(2) i]
end
end
“无需初始化/预分配即推送数据”的更改:
condition
时递增。以下代码必须明确。
%// Modified code
count = 1; %// Custom iterator; initialize it for the iteration when condition would be satisfied for the first time
for i = 1:10
if rand(1)>0.5
data1 = rand(2,1)
K(count,:) = [data1(1) data1(2) i] %// Row indexing to save data at each iteration
count = count +1; %// We need to manually increment our custom iterator
end
end
答案 1 :(得分:2)
如果我们从上面假设数据是Nx2矩阵,并且您只想保存满足某些条件的行,那么您几乎拥有正确的代码来更新您的 K 矩阵,无需将其初始化为某个大小:
K = []; % initialize to an empty matrix
for i=1:size(data,1) % iterate over the rows of data
if (condition)
% condition is satisfied so update K
K = [K ; data(i,:) i];
end
end
K % contains all rows of data and the row number (i) that satisfied condition
请注意,要从行中获取所有元素,我们使用冒号来表示从 i 行获取所有列元素。