我是Matlab和编程的新手。我正在尝试编写一个for循环,我可以将生成的不均匀长度向量保存到矩阵中。
这是我的基本循环:
G1 = [1 2 3 4];
for G1 = G1(1:end)
y = randn(1,G1)
end
我喜欢将y的所有值保存在矩阵的连续行中,如下所示:
我首先尝试将y初始化为零矩阵并运行for循环:
G1 = [1 2 3 4];
for G1 = G1(1:end)
y = zeros(4,4)
y(G1,:) = randn(1,G1)
end
错误是“订阅分配维度不匹配”。我还尝试了for循环的其他变体,所有都首先初始化零矩阵,但我收到了相同的错误消息。我该怎么做呢?谢谢!
答案 0 :(得分:2)
对您的问题的简短回答是:
y = tril(randn(4));
这将返回lower triangular
大小为4的方阵的normally distributed random numbers
部分。
注意我对4进行了硬编码,但您可以轻松地将其替换为max(G1)
或length(G1)
。
至于第一个代码块,您应该注意:
G1
。使用另一个变量作为计数器,例如counter
; y
。当你试图在第二次尝试中修复时,你似乎已经注意到了它。但是你没有考虑到randn(1,G1)
每次迭代都会给你不同长度的vecors,如果你不注意就会导致尺寸不匹配错误。对于第二个代码段:
y = zeros(4,4)
在循环内初始化。这意味着之后分配给它的任何数据都会在每个循环中消失。你需要在 for循环之前初始化你的vector ; 最后,在更正后你应该有一个完整的代码如下:
G1=1:4;
y=zeros(4);
for counter=1:4
y(counter,1:counter)=randn(1,counter);
end
>> y
y =
-0.43911 0.00000 0.00000 0.00000
0.09520 -0.21825 0.00000 0.00000
0.32569 1.04944 -1.19666 0.00000
0.25531 0.68336 -1.02413 0.72696
注意y(counter,1:counter)=randn(1,counter);
中的索引以避免不匹配错误。