For Loop in 3D Array

10 visualizzazioni (ultimi 30 giorni)
MarshallSc
MarshallSc il 31 Mag 2022
Commentato: MarshallSc il 31 Mag 2022
For 2D arrays, the operation that I want to execute is:
a = rand(3,3);
for i = 1:numel(a)
for j = 1:numel(a)
out(i,j) = (a(i) - a(j)) / (a(i) + a(j));
end
end
Which will turn the out into a skew-symmetric matrix. Now I want to perform the same operation instead the matrix is in 3D, how can I do that? The speed is important since my original matrix is (100,100,726). Thanks!

Risposta accettata

Dyuman Joshi
Dyuman Joshi il 31 Mag 2022
Modificato: Dyuman Joshi il 31 Mag 2022
a = rand(3,3,4);
for k=1:size(a,3)
y=a(:,:,k);
for i=1:size(y,1)
for j=1:size(y,2)
out(i,j,k)=(y(i) - y(j))/(y(i) + y(j));
end
end
end
out
out =
out(:,:,1) = 0 0.6498 -0.1418 -0.6498 0 -0.7248 0.1418 0.7248 0 out(:,:,2) = 0 -0.6166 -0.5396 0.6166 0 0.1154 0.5396 -0.1154 0 out(:,:,3) = 0 0.1018 0.1400 -0.1018 0 0.0387 -0.1400 -0.0387 0 out(:,:,4) = 0 0.2123 0.1857 -0.2123 0 -0.0277 -0.1857 0.0277 0
  2 Commenti
Dyuman Joshi
Dyuman Joshi il 31 Mag 2022
It will be skew-symmetric matrix. I have made an edit, take a look at it again.
MarshallSc
MarshallSc il 31 Mag 2022
Thanks, yeah, changing the i and j indices from 1:size(y,1) to numel(y) would do the trick. Thanks again!

Accedi per commentare.

Più risposte (0)

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by