How to left divide 4D arrays

2 visualizzazioni (ultimi 30 giorni)
Mantas Vaitonis
Mantas Vaitonis il 16 Lug 2018
Commentato: Mantas Vaitonis il 22 Lug 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)?

Risposta accettata

Walter Roberson
Walter Roberson il 16 Lug 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 Commenti
Walter Roberson
Walter Roberson il 19 Lug 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 il 22 Lug 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);

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Parallel Computing Fundamentals in Help Center e File Exchange

Prodotti


Release

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by