for i=1:30
Name(i,1)=sprintf('String_%i',i);
end
錯誤,我只是困惑究竟是不是在這裏工作,這個腳本看起來很簡單,wnat打造一個字符串列表,從1編號到30.收到錯誤下標分配維度不匹配。在MATLAB
下標的轉讓尺寸不匹配。
for i=1:30
Name(i,1)=sprintf('String_%i',i);
end
錯誤,我只是困惑究竟是不是在這裏工作,這個腳本看起來很簡單,wnat打造一個字符串列表,從1編號到30.收到錯誤下標分配維度不匹配。在MATLAB
下標的轉讓尺寸不匹配。
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
字符數組存儲在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以外的其他語言。
很好的解釋!我想你在循環中缺少花括號;否則會出現錯誤。即或者使用'Name {i,1} = ...'或'... = {sprintf(...)}'。 –
@ Benoit_11對不起,關於這個,我編輯了答案 – patrik
嘗試用單元格數組來代替它,它的工作原理如下:'Name {i,1} = ...'。您不能將字符串存儲到常規數值數組中。您也可以使用'sprintfc'作爲單行:'Name = sprintfc('String_%i',1:30)''。 –