繁体   English   中英

Octave :我收到一个尺寸错误:cat:执行 cell2mat 时尺寸不匹配

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

我将不胜感激任何建议。

这里缺少很多信息,但我怀疑您的问题归结为以下三个事实。

  1. 标准数组必须始终包含相同类型的元素。 例如,它不能在一个索引中包含一个“字符串”,而在另一个索引中包含一个“数字”; 这就是元胞数组的用途。

  2. 尝试通过 cell2mat 将包含此类混合元素的元胞数组转换为标准数组时,应根据您的警告/错误级别,要么失败,要么将所有元素转换为它们的最小公分母。 例如,如果您同时拥有“日期字符串”(如“2011-01-02”)和“数字”,则它可能会首先将“数字”插入为 ascii 字符代码。

  3. 八度中的字符串只是字符数组。 如果您尝试垂直连接两个长度不等的字符串,您将收到关于维度不匹配的错误,因为连接中的结果数组始终需要正确为矩形。

例如,如果所有字符串的大小相同(注意数字转换)

> 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 进行转换可能不是正确的方法。 相反,您可以收集所有列来分隔变量,然后通过cell2matcellfun方法相应地处理它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM