我在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
我有什么想法可以做到这一点?
答案 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