How to left divide 4D arrays

2 Ansichten (letzte 30 Tage)
Mantas Vaitonis
Mantas Vaitonis am 16 Jul. 2018
Kommentiert: Mantas Vaitonis am 22 Jul. 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)?

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 16 Jul. 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 Kommentare
Walter Roberson
Walter Roberson am 19 Jul. 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 am 22 Jul. 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);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Parallel Computing Fundamentals finden Sie in Help Center und File Exchange

Produkte


Version

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by