如何将某些行添加到2D矩阵?

时间:2018-01-16 21:04:43

标签: matlab for-loop while-loop

我在MATLAB中有一个简单的2D矩阵:

A = [34 10;
     23 10;
     64 10];

我需要做的是找到max(A(:,1)),然后while A(j,1) < max(A(:,1))将类似[A(j,1)+1 10]的行添加到矩阵中,所以我想最终得到这个:

A = [34 10;
     35 10;
     36 10;
     37 10;
       .
       .
       .
     62 10;
     63 10;
     64 10;
       .
     23 10;
     24 10;
     25 10;
       .
       .
       .
     62 10
     63 10
     64 10
       .
     64 10];

我写了以下内容但它不起作用:

for j = 1:size(A,1)
    while A(j,1) < max(A(:,1))
        A(end+1,:) = [A(j,1)+1 10];
    end
end

我有什么想法可以做到这一点?

2 个答案:

答案 0 :(得分:3)

对于没有循环的Matlab,您可以尝试以下操作:

my_max = max(A(:,1));
my_arrays = arrayfun(@(x) [x:my_max]', A(:,1), 'uni', 0);
my_expanded_column = cat(1,my_arrays{:});
my_output = [my_expanded_column, 10*ones(size(my_expanded_column))]

首先找到最大值, 然后将每个条目扩展到最大范围, 然后将所有范围组合成一个, 然后在第10列的第二列上添加。

答案 1 :(得分:1)

你的while循环卡在一遍又一遍地检查同一个元素(因为你没有增加任何东西)。

您可以使用for循环从A的第一列中的每个元素开始计算。并确保将行添加到新矩阵中,否则您的循环将无限递归地展开A

例如:

B = [];
index = 1; % keeps track of the last element of B

for j = 1:size(A,1)
    for k = A(j,1):max(A(:,1))
        B(index,:) = [k A(j,2)];
        index = index + 1;
    end
end