[英]Octave : I receive a dimension error: cat: dimension mismatch when doing cell2mat
我有一个具有维度的元胞数组(类元胞),我尝试将其转换为双精度数。 使用 cell2mat 时出现尺寸错误。 (第 1 行和 kol 1 不是数字)
debug> `class(mycsvdata)`
ans = cell
CCC=cell2mat(mycsvdata(2:end,2:end))
error: cat: dimension mismatch
error: called from
cell2mat at line 80 column 11
leesCsvPuur at line 7 column 2
verwerkStooq at line 37 column 8
handleStooq at line 77 column 1
testinvoer03 at line 72 column 1
debug> `size(mycsvdata)`
ans =
9 7
我试过 cell2mat :
debug> `cell2mat{1 2 3; 4 5 6}`
ans =
1 2 3
4 5 6
我将不胜感激任何建议。
这里缺少很多信息,但我怀疑您的问题归结为以下三个事实。
标准数组必须始终包含相同类型的元素。 例如,它不能在一个索引中包含一个“字符串”,而在另一个索引中包含一个“数字”; 这就是元胞数组的用途。
尝试通过 cell2mat 将包含此类混合元素的元胞数组转换为标准数组时,应根据您的警告/错误级别,要么失败,要么将所有元素转换为它们的最小公分母。 例如,如果您同时拥有“日期字符串”(如“2011-01-02”)和“数字”,则它可能会首先将“数字”插入为 ascii 字符代码。
八度中的字符串只是字符数组。 如果您尝试垂直连接两个长度不等的字符串,您将收到关于维度不匹配的错误,因为连接中的结果数组始终需要正确为矩形。
例如,如果所有字符串的大小相同(注意数字转换)
> c = { '2011-01-01', 98.1; '2011-01-20', 97 };
> C = cell2mat(c)
warning: implicit conversion from numeric to char
C =
2011-01-01b
2011-01-20a
如果不是(请注意未填充的日期):
> c = { '2011-01-01'; '2011-01-2' };
> C = cell2mat(c)
error: cat: dimension mismatch
error: called from
cell2mat at line 80 column 11
我不知道由您的csv2cell
操作产生的单元格数组的确切性质,但我敢打赌,与上述类似的事情正在发生。
通常,立即通过 cell2mat 进行转换可能不是正确的方法。 相反,您可以收集所有列来分隔变量,然后通过cell2mat
或cellfun
方法相应地处理它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.