簡體   English   中英

下標分配尺寸不匹配。 Matlab中的錯誤

[英]Subscripted assignment dimension mismatch. error in matlab

    for i=1:30
  Name(i,1)=sprintf('String_%i',i);
end

我只是感到困惑,在這里行不通,該腳本看起來非常簡單,需要構建一個編號從1到30的字符串列表。

下標分配尺寸不匹配。

Matlab實際上沒有字符串,它們具有char數組。 與幾乎所有編程語言一樣,Matlab在不知道要分配多少內存的情況下無法定義變量。 Java解決方案如下所示:

String str[] = {"I","am","a","string"};

與c ++解決方案類似:

std::string str[] = {"I","am","another","string"};

c解決方案看起來有所不同,但通常與c ++中的解決方案相同:

const char* str[] = {"I","am","a","c-type","string"};

但是,盡管有這些表象,但從根本上講它們都是相同的,因為即使它們不會啟動,它們都知道要分配多少數據。 特別地,您可以例如編寫:

String str[3];
// Initialize element with an any length string.

原因是存儲在每個元素中的內存是通過java中的引用以及c和c ++中的指針存儲的。 因此,取決於操作系統,每個元素都是4(32位)或8(64位)字節。

但是,在Matlab矩陣中,數據是按值存儲的。 這使得不可能將N char數組存儲在1xNNx1矩陣中。 矩陣中的每個元素只能與char大小相同,並且類型為char。 這意味着,如果您使用字符串,則需要使用數據結構cell (如Benoit_11所建議),該單元在每個元素中存儲對任何Matlab對象的引用。

k = 1:30;
Name = cell(length(k),1);
for i=k
    Name{i,1}=sprintf('String_%i',i);
end

希望這種解釋對您有意義。 我假設根據您的嘗試,您至少具有至少一種不同於matlab的語言的編程經驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM