如何看待matlab陣列下標從1開始,for迴圈 ifelse 語句也和其他語言不同?

時間 2021-05-12 01:05:38

1樓:

我先後學過大概10種語言吧。

首先,for迴圈,if語句各個語言都不一樣,沒必要說MATLAB和其他語言不同。

關於索引起始數。

發現三大m語言(MATLAB,mathematica,maple)都是1開始的,R語言也是,Julia部分模仿MATLAB,也是1開始的,VBA最神奇,起始位置可以自己選擇。

總體來看,偏向於程式設計師的語言以0開始的偏多,偏向於非程式設計師的語言以1開始的偏多。

2樓:量子永生

我覺得主要原因是Matlab偏向於應用層。

對於一門應用層而不是底層的語言來說,從1開始數也是有不少好處的。

第一,避免了「第零個」的反直覺。第二,可以很方便的標記任意序列倒著數的位置。

比如說用[1]來表示第乙個,那麼[-1]就是倒數第乙個;

如果用[0]來表示第乙個,那麼就不能用[-0]來表示最後乙個了,因為0=-0,而選擇其他任何的數表示,都不對稱,就很難受。

第三,判斷某個值有在陣列中的下標,如果沒有出現,Matlab直接返回下標0,而大部分語言中,0都等於false。

比如說從陣列[1,2,3]中找到x,找到了則執行A plan,否則執行B plan。

那麼Matlab:

iffind([1

,2,3

]==x)

else

end如果是別的語言,就要:

iffind([1

,2,3

]==x)

>-1else

end這就很彆扭,如果下標是0,結果卻不是false而是true;

這導致不但多了一步運算,還把返回下標的函式的值域從unsigned int擴大到了int。

3樓:

要適應程式設計環境,不要與之對抗。

否則虧的是你自己。

教你乙個法則:

index 表示下標從0計數

at 表示下標從1記數

(逃~)

4樓:鮑里斯

歷史包袱很難甩掉。matlab 不是沒想改過indexing。 可是太多build in function 是 1-based indexing,所以就這樣嘍。

對於非程式設計師來說 1-based indexing 更加自然,學習成本更低 (還有程式設計師用matlab,用matlab的都是我們這樣的二手科學家)

Lua 為什麼陣列下標從 1 開始?

Dionysos lai 留著,佔坑,待會兒回去講。起始,原因並沒有像大家猜測的那樣。在官網lua users wiki Lua Faq和非非官網Lua Unofficial FAQ uFAQ 都提到過這個問題。這裡,貼一下其回答內容 1.5.1 Why do Lua arrays count fr...

為什麼C語言的陣列下標從0開始而不是從1開始?

In most programming language,the name of any array is a pointer,which is nothing but a reference to a memory location,and so the expression array n po...

matlab中如何將200陣列每20項相加,輸出乙個新陣列?

假設原始向量為1x200,用reshape重構20x10二維矩陣,sum求和即可 A rand 1 200 B reshape A 20,C sum B 輸出結果如下 向量A部分值省略 A 0.9169 0.0836 0.3540 0.2757 0.1952 0.3578 0.2859 B 0.91...