Заполнение матрицы векторами в цикле и применение операции - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю над Matlab с матрицей.Я хотел бы воспроизвести эту матрицу и применить сумму для элементов в строках.

enter image description here

У меня есть два вектора, определенные этим кодом:

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.Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Почему ты вообще зациклен?sum фактически имеет векторную поддержку;простой resultvec = [a(:,1),a(:,2),sum(a,2)] будет работать.


Что касается вашего кода: конечно, он не работает.Что вы ожидаете от содержимого a?Вы создаете a как индекс цикла, который работает в диапазоне 1:length(resultvec).Следовательно, внутри каждой итерации цикла a является скаляром.Вы пытаетесь назвать это, как будто это трехэлементный вектор.Также вы не определяете b и c.Это может быть возможно в R, если судить, откуда вы, но не в MATLAB.

0 голосов
/ 26 ноября 2018

Вы можете использовать meshgrid для этого без цикла for.

[a,b] = meshgrid(1:5,1:3); 
M = [a(:) b(:)];
M(:,3) = sum(M,2); % Create third column by summing first two
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...