什么是空的`()`在Matlab矩阵上做什么?

ger*_*rit 16 matlab matrix

Matlab,表达式M()究竟在哪里做M矩阵?

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

ans =

     8     1     6
     3     5     7
     4     9     2
Run Code Online (Sandbox Code Playgroud)

isequaln(M, M())在任何情况下表达都是真的吗?是M()简单的拷贝M,或相同的表达,或者是有地方提到任何上下文M()手段东西比指的是别的M?也许在运算符重载的情况下?

bla*_*bla 15

除了事实之外,它会给某些函数提供默认操作,例如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
Run Code Online (Sandbox Code Playgroud)

让:

Elapsed time is 0.047250 seconds.
Elapsed time is 0.022260 seconds.
Elapsed time is 0.011925 seconds.
Run Code Online (Sandbox Code Playgroud)

然而,对于作业而言,a1=avs 之间的差异非常小a1=a(),后者则慢了1.5%......

也许这个主题将回答你关于运算符重载的一些问题.

  • +1,但尝试`a = rand(10,10,10,10,10);`和`a();`将慢于`a;`... Matlab以神秘的方式引用数据:) (9认同)
  • 对不起,如果你在一个函数中运行它,方法1和3之间没有速度差异:matlab 2011b,64位,Linux. (2认同)