[英]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.