[英]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數組存儲在1xN
或Nx1
矩陣中。 矩陣中的每個元素只能與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.