Что делает пустая `()` на матрице Matlab? - программирование
Подтвердить что ты не робот

Что делает пустая `()` на матрице Matlab?

В Matlab, что же делает выражение M() где M - матрица?

>> M = magic(3);
>> M() 

ans =

     8     1     6
     3     5     7
     4     9     2

Является ли выражение isequaln(M, M()) истинным при любых обстоятельствах? Является ли M() просто копией M или идентичным выражением, или существует ли какой-либо контекст, где обращение к M() означает нечто иное, чем обращение к M? Может быть, в случае перегрузки оператора?

4b9b3361

Ответ 1

Помимо того факта, что он даст операцию по умолчанию для некоторой функции, такой как rand() и пасхальные яйца, такие как imagesc() и spy() (это будет работать и без ()), похоже, быть более эффективным способом доступа к целым массивам, если их размерность ниже 5 (как заметил @Rody Oldenhuis). Например:

a=rand(2^12);

tic
for j=1:1e5
a ;
end
toc

tic
for j=1:1e5
a(:)  ;
end
toc

tic
for j=1:1e5
a()   ; 
end
toc

выход:

Elapsed time is 0.047250 seconds.
Elapsed time is 0.022260 seconds.
Elapsed time is 0.011925 seconds.

Однако для присвоений очень мало различий между a1=a vs a1=a(), где последнее медленнее на 1,5%...

Возможно, этот поток ответит на ваш вопрос относительно перегрузки оператора.