Matlab具有以下功能,以檢查輸入:爲什麼isscalar,isvector和ismatrix對於A = 1都是真的?
對於A = 1
(或任何「標量」輸入)全部以上返回true
。
爲什麼我會看到這種違反直覺的行爲?
而我將如何將A = 1
標識爲標量?
Matlab具有以下功能,以檢查輸入:爲什麼isscalar,isvector和ismatrix對於A = 1都是真的?
對於A = 1
(或任何「標量」輸入)全部以上返回true
。
爲什麼我會看到這種違反直覺的行爲?
而我將如何將A = 1
標識爲標量?
我不覺得它是違反直覺的。在數學中存在1維的向量(即使它們與標量同構)。此外,一個矩陣可以完美的尺寸爲1x1。
確實可以將單個數字視爲標量,1向量或1x1矩陣。 Matlab的觀點是:
更一般地: 尾隨單身尺寸不計數。例如,還可以考慮尺寸爲2x3x4的3D陣列,例如尺寸爲2x3x4x1x1的5D陣列。這工作沒有錯誤:現在
>> a = rand(2,3,4);
>> a(2,2,2)
ans =
0.2575
>> a(2,2,2,1,1)
ans =
0.2575
,如果你想檢查是否A
是一個向量,矩陣,或一個以上的元素多維數組,使用
numel(A)>1
的numel
函數返回其輸入參數的元素數量。
因爲Matlab將標量解釋爲1乘1 數組,請參閱size
documentation。
因此,根據您的應用程序,你就必須
isscalar
從標區分向量(因爲它會返回false
爲載體)isvector
區分矩陣從一個向量(因爲它將返回矩陣的false
)Be因爲如果你試圖弄清楚一個變量是一個向量而不是一個標量,並且你使用isvector
,那麼標量和向量將返回true
- 正如問題中指出的那樣。
此外,對於空矩陣,只有'ismatrix'返回'[]'''true'。然而,'ismatrix'和'isvector'對於空'零(1,0)'返回'true'或者它是轉置。這符合你的答案,即'n'可以是'0'。 – horchler 2014-08-29 23:51:58
@horchler好點! – 2014-08-29 23:54:54