How to left divide 4D arrays

4 visualizaciones (últimos 30 días)
Mantas Vaitonis
Mantas Vaitonis el 16 de Jul. de 2018
Comentada: Mantas Vaitonis el 22 de Jul. de 2018
If I have two 2D gpuArrays f(NxM) and f1(NxM) of same size, then I can left divide them like this:
beta=arrayfun(@(n) f(:,n)\f1(:,n), 1:size(f,2));
What would be the way to do this if both f and f1 are 4D arrays of size (NxMxZxK)?

Respuesta aceptada

Walter Roberson
Walter Roberson el 16 de Jul. de 2018
beta = arrayfun(@(n) f(:,n)\f1(:,n), 1:numel(f)/size(f,1));
after which you will need to reshape() to the appropriate size.
  15 comentarios
Walter Roberson
Walter Roberson el 19 de Jul. de 2018
The left division of two real-valued column vectors A\B, is equal to the dot product of the two vectors divided by the square of the norm of A (that is, the sum of squares of the elements of A)
Mantas Vaitonis
Mantas Vaitonis el 22 de Jul. de 2018
@Walter Roberso, great thank you, using the method you did suggest speed up is more then 100x times:
clear;
aaa = randi([-10 10], 5,4,10,100 );
bbb = randi([-10 10], 5,4,10,100 );
f = gpuArray(aaa );
f1 = gpuArray(bbb );
tic
ff=f;
ff1=f1;
r=dot(ff,ff1);
rr=ff.^2;
S = sum(rr,1);
ss=arrayfun(@rdivide,r,S);

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Parallel Computing Fundamentals en Help Center y File Exchange.

Productos


Versión

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by