在matlab中扩展矩阵?

时间:2014-05-30 21:22:43

标签: matlab matrix expand

我想在条件语句下逐行扩展矩阵而不初始化矩阵。在C ++中,我只使用std::vectorpush_back方法而不在C ++中初始化向量的大小。但是,我想在Matlab中做同样的场景。这是我的伪代码

for i = 1:lengt(data)
    if ( condition )
        K = [data(1) data(2) i]
end

K 

2 个答案:

答案 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

“无需初始化/预分配即推送数据”的更改:

  1. 为了在每次迭代时保存数据,我们继续沿着所选维度“堆叠”数据。这可以被认为是推动数据。对于2D情况,使用“行向量推送”或“列向量推送”。对于这种情况,我们假设一个以前的案例。
  2. 我们不使用原始迭代器索引到K,但是使用自定义迭代器, 仅在满足condition时递增。
  3. 以下代码必须明确。

    %// 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 行获取所有列元素。