У меня есть две матрицы A
и B
в Matlab. А имеет размер mx6
, например.Слияние двух матриц разного размера в Matlab?
A=[ 1 1 1 1 | 1 0;
1 1 1 2 | 1 0;
1 1 1 3 | 1 0;
1 1 1 4 | 1 0;
1 2 3 2 | 1 0;
1 2 3 3 | 1 0;
1 2 3 4 | 1 0]
B
имеет размерность nx6
, например,
B=[ 1 1 1 1 | 1 1;
1 2 3 1 | 1 1]
Я хочу объединить A
и B
и создать матрицу C
, выполнив следующие действия без использования петель:
1) Рассмотрим B(i,1:4)
; если существует j
, так что A(j,1:4)
равно B(i,1:4)
[это может произойти не более одного из j
], тогда C(i,:)=[B(i,1:4) A(j,5)+B(i,5) A(j,6)+B(i,6)]
. Сделайте это для всех i=1,...,n
.
2) Заполните оставшиеся строки C
строками A
и B
, которые не могут быть согласованы в соответствии с этапом 1).
В примере
C=[ 1 1 1 1 | 2 1; %Step 1) above
------------------------------------
1 1 1 2 | 1 0; %Step 2) above
1 1 1 3 | 1 0; %firstly rows from A
1 1 1 4 | 1 0;
1 2 3 2 | 1 0;
1 2 3 3 | 1 0;
1 2 3 4 | 1 0;
1 2 3 1 | 1 1] %lastly rows from B
Моя попытка с помощью петли:
%STEP 1
for i=1:size(B,1)
for j=1:size(A,1)
if all(B(i,1:4)==A(j,1:4),2)
C(i,:)=[B(i,1:4) A(j,5)+B(i,5) A(j,6)+B(i,6)]
end
end
end
%STEP 2
C=[ C; A(logical(1-ismember(A(:,1:4), B(:,1:4),'rows')),:)];
C=[ C; B(logical(1-ismember(B(:,1:4), A(:,1:4),'rows')),:)];
Вы писали код, чтобы попытаться это сделать? Какая у вас проблема? – rlbond
Я не указал, что я не хочу использовать циклы. Я понятия не имею, как ответить на вопрос, не используя циклы. Просто отредактирован! – user3285148
Пожалуйста, напишите код, который вы написали. – rlbond