Matlab 在循环中用向量填充矩阵并应用操作

Matlab 在循环中用向量填充矩阵并应用操作,matlab,Matlab,我正在用一个矩阵处理matlab。我想复制这个矩阵,并对行中的元素应用sum 这段代码定义了两个向量: unitsvector=1:5; reordervector=1:3; 然后,我创建一个空矩阵来存储值: resultvec=zeros(size(unitsvector,2)*size(reordervector,2),3); 最后,这里是我使用的循环,但它不起作用: for a=1:length(resultvec) for b=reordervector f

我正在用一个矩阵处理matlab。我想复制这个矩阵,并对行中的元素应用sum

这段代码定义了两个向量:

unitsvector=1:5;
reordervector=1:3;
然后,我创建一个空矩阵来存储值:

resultvec=zeros(size(unitsvector,2)*size(reordervector,2),3);
最后,这里是我使用的循环,但它不起作用:

for a=1:length(resultvec)
    for b=reordervector
        for c=unitsvector
            resultvec(a,1)=b;
            resultvec(a,2)=c;
            resultvec(a,3)=b+c;
        end
    end
end

我如何在matlab中重现这个矩阵。谢谢您的帮助。

您可以使用
meshgrid
来完成此操作,而无需使用for循环

[a,b] = meshgrid(1:5,1:3); 
M = [a(:) b(:)];
M(:,3) = sum(M,2); % Create third column by summing first two

您可以在不使用for循环的情况下使用
meshgrid

[a,b] = meshgrid(1:5,1:3); 
M = [a(:) b(:)];
M(:,3) = sum(M,2); % Create third column by summing first two

你为什么要绕圈子?实际上有向量支持;一个简单的
resultvec=[a(:,1),a(:,2),sum(a,2)]
就可以了



至于你的代码:当然不行了。您希望
a
的内容是什么?创建
a
作为循环索引,该索引在
1:length(resultvec)
范围内运行。因此,在每个循环迭代中,
a
是一个标量。你试着把它叫做三元素向量。您也没有定义
b
c
。这在R中是可能的,可以判断您来自哪里,但在MATLAB中不可能。

为什么要循环?实际上有向量支持;一个简单的
resultvec=[a(:,1),a(:,2),sum(a,2)]
就可以了



至于你的代码:当然不行了。您希望
a
的内容是什么?创建
a
作为循环索引,该索引在
1:length(resultvec)
范围内运行。因此,在每个循环迭代中,
a
是一个标量。你试着把它叫做三元素向量。您也没有定义
b
c
。这在R中是可能的,可以判断你来自哪里,但在MATLAB中是不可能的。

我甚至没有考虑实际的向量创建,我忽略了这一点。很好地理解了它,你的答案比我的好得多。我甚至没有考虑实际的向量创建,我错过了。很好地理解了它,你的答案比我的好得多。