Matrix column subtraction problem

2 visualizaciones (últimos 30 días)
Jakub Nosek
Jakub Nosek el 11 de Mzo. de 2018
Comentada: Jakub Nosek el 11 de Mzo. de 2018
I know this is really basic stuff but unfortunately I can't get to the right solution.
I have for example these 2 matrices:
matrixA=[1 5;5 2;0 0;3 2;3 6]
and
matrixB=[4 5 6;8 5 2;3 3 2;1 2 1;2 5 4]
What I want to do is to subtract all columns in matrixB from column 1 and column 2 respectively in matrixA. So I want to make
matrixC=[1-4 1-5 1-6 5-4 5-5 5-6;5-8 5-5 5-2 2-8 2-5 2-2;....;....;.....]

Respuesta aceptada

Roger Stafford
Roger Stafford el 11 de Mzo. de 2018
Editada: Roger Stafford el 11 de Mzo. de 2018
C = zeros(5,2*3);
for p = 1:2
for q = 1:3
C(:,3*p+q-3) = A(:,p)-B(:,q);
end
end
Or this:
C = reshape(repmat(reshape(A,5,1,2),1,3,1)-repmat(reshape(B,5,3,1),1,1,2),5,[]);
  4 comentarios
Roger Stafford
Roger Stafford el 11 de Mzo. de 2018
@Jakub: For matrices A and B of general size:
[m,n1] = size(A);
n2 = size(B,2); % size(B,1) must also be m
C = reshape(repmat(reshape(A,m,1,n1),1,n2,1)-repmat(reshape(B,m,n2,1),1,1,n1),m,[]);
Jakub Nosek
Jakub Nosek el 11 de Mzo. de 2018
Thanks!

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 11 de Mzo. de 2018
[matrixA(:,1)-matrixB,matrixA(:,2)-matrixB]
This might require R2016b or later.
  2 comentarios
Jakub Nosek
Jakub Nosek el 11 de Mzo. de 2018
Thanks, is there any other solution for older versions of MATLAB?
Walter Roberson
Walter Roberson el 11 de Mzo. de 2018
cell2mat(arrayfun(@(COLIDX) bsxfun(@minus, matrixA(:,COLIDX), matrixB), 1:size(matrixA,2), 'uniform', 0))

Iniciar sesión para comentar.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by