MATLAB syntax (parantheses without intermediate steps)

3 ビュー (過去 30 日間)
Christian Huggler
Christian Huggler 2019 年 11 月 5 日
編集済み: dpb 2019 年 11 月 5 日
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))(:));

採用された回答

dpb
dpb 2019 年 11 月 5 日
編集済み: dpb 2019 年 11 月 5 日
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

その他の回答 (2 件)

Fangjun Jiang
Fangjun Jiang 2019 年 11 月 5 日
mean(mean(abs(rand(10)-eye(10))))
  3 件のコメント
Christian Huggler
Christian Huggler 2019 年 11 月 5 日
My code is just an example. You're right, it works with calling "mean" twice. But let's change the example to "median" - matematical not the same on using this function twice.
Steven Lord
Steven Lord 2019 年 11 月 5 日
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
Steven Lord 2019 年 11 月 5 日
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

カテゴリ

Help Center および File ExchangeEntering Commands についてさらに検索

製品


リリース

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by