Question related to vectorized matrix operation.
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Pappu Murthy
el 22 de En. de 2017
Editada: Pappu Murthy
el 23 de En. de 2017
i have two matrices A and B; A is say (Nx3) where N is rather large like 1000+... B is (nx2) where n is rather smaller of the order 10 or so.. but it does not matter it is smaller than A row size. i would like to compute
for i = 1:N
D = ( A(i,1)- B(1:n,1) )^2 + (A(i,2) - B(1:n,2)^2 )
end
for e.g. if N is 4, and n =2 then D = a [4x2] matrix...
I am able to perform this using for loops without much difficulty but would like to try using the vectorized Matrix operations instead for improving the performance and speed. Thanks in advance.
0 comentarios
Respuesta aceptada
Stephen23
el 22 de En. de 2017
Editada: Andrei Bobrov
el 23 de En. de 2017
>> A = randi(9,4,3)
A =
4 2 9
9 4 4
5 4 8
4 2 8
>> B = randi(9,3,2)
B =
3 2
6 4
3 1
>> D = bsxfun(@minus,A(:,1),B(:,1).').^2 + bsxfun(@minus,A(:,2),B(:,2).').^2
D =
1 8 2
40 9 45
8 1 13
1 8 2
4 comentarios
Más respuestas (1)
Andrei Bobrov
el 23 de En. de 2017
Editada: Andrei Bobrov
el 23 de En. de 2017
My variants:
For R2016b and later
>> C2 = squeeze(sum((A(:,1:2) - permute(B,[3,2,1])).^2,2))
C2 =
1 8 2
40 9 45
8 1 13
1 8 2
and with bsxfun:
>> C3 = squeeze(sum(bsxfun(@minus,A(:,1:2),permute(B,[3,2,1])).^2,2))
C3 =
1 8 2
40 9 45
8 1 13
1 8 2
1 comentario
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!