保存在每个循环中创建的矩阵值保存在公共矩阵中,每个循环矩阵具有相同的行大小但是列是ow

时间:2017-04-09 05:13:42

标签: matlab for-loop matrix

a=18;
b=22;
for i=1:10
r1 = randi([18 22],1,1)
name= (b-a).*rand(r1,2) + a
end

现在在所有生成值的结果矩阵中保存所有名称值矩阵 在每个循环行大小不固定但coiumn是2

2 个答案:

答案 0 :(得分:0)

预分配最大大小的矩阵并删除末尾的冗余行:

a = 18;
b = 22;
% number of iterations
n = 10;
% maximum number of rows
maxRows = b*n;
% preallocating matrix
nameMat = zeros(maxRows,2);
currentRow = 0;
for i = 1:n
    r1 = randi([18 22],1,1);
    name = (b-a).*rand(r1,2) + a;
    nameRows = size(name,1);
    nameMat((1:nameRows) + currentRow,:) = name;
    currentRow = currentRow + nameRows; 
end
% remove redundant rows
nameMat(currentRow+1:end,:) = [];

答案 1 :(得分:0)

您可以使用一行代码实现它;实际上在循环的每次迭代中 你:

  • 生成integer随机数r1(例如20
  • 然后用它生成r1 double随机数,乘以(b-a) 然后添加到a
  • 这些随机数不受previos迭代中生成的那些影响
  • ab是常量,因此请勿在循环中更改

在你的循环结束时,你的行数将是sum integer随机数,因此您可以在评估10name时直接生成sum整数随机数,以创建所需的集name值:

a=18;
b=22;
n_iter=10;

name=(b-a).*rand(sum(randi([18 22],n_iter,1)),2) + a

希望这有帮助,

Qapla'