How to left divide 4D arrays

3 vues (au cours des 30 derniers jours)
Mantas Vaitonis
Mantas Vaitonis le 16 Juil 2018
Commenté : Mantas Vaitonis le 22 Juil 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)?

Réponse acceptée

Walter Roberson
Walter Roberson le 16 Juil 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 commentaires
Walter Roberson
Walter Roberson le 19 Juil 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 le 22 Juil 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);

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Parallel Computing Fundamentals dans Help Center et File Exchange

Produits


Version

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by