MATLAB syntax (parantheses without intermediate steps)
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Why is following intermediate calculation step necessary?
temp = abs(rand(10)-eye(10));
result = mean(temp(:));
In Octave is it possible to write the same on one single line:
result = mean(abs(rand(10)-eye(10))(:));
0 commentaires
Réponse acceptée
dpb
le 5 Nov 2019
Modifié(e) : dpb
le 5 Nov 2019
Because to date TMW has chosen to not implement post-addressing expressions on results.
"WHY?" you'd have to ask TMW and it's unlikely they will discuss such internals design decisions/plans publicly.
You can write the expression on one line in MATLAB, too, just more explicitly...
result = mean(mean(abs(rand(10)-eye(10)))); % is one common idiom for 2D arrays
or
result = mean(reshape(abs(rand(10)-eye(10))),:,1); % is generic
0 commentaires
Plus de réponses (2)
Fangjun Jiang
le 5 Nov 2019
mean(mean(abs(rand(10)-eye(10))))
3 commentaires
Steven Lord
le 5 Nov 2019
That fails to behave the same way as the original code if the inputs have more than 2 dimensions.
x = rand(3, 4, 5);
mean(mean(abs(x - 0.5)))
Steven Lord
le 5 Nov 2019
That intermediate step isn't necessary in this case, since you're using a release that supports the 'all' dimension input argument to mean. I'll create the data as separate variables so you can check that the two-step and one-step approaches give the same result.
x = rand(10);
temp = abs(x-eye(10));
result1 = mean(temp(:));
result2 = mean(abs(x-eye(10)), 'all');
isequal(result1, result2) % true
0 commentaires
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!