【问题标题】:Concatenating a numeric matrix with a 1xn cell将数字矩阵与 1xn 单元格连接起来
【发布时间】:2013-10-21 02:24:26
【问题描述】:

尝试以下串联时:

for i=1:1:length(Open)
    data(i,1) = Open(i);
    data(i,2) = Close(i);
    data(i,3) = High(i);
    data(i,4) = Low(i);
    data(i,5) = Volume(i);
    data(i,6) = Adj_Close(i);
    data(i,7) = cell2mat(dates(1,i));
end

除了dates 之外的所有矩阵都包含双精度值,dates 是一个元胞数组,其日期格式为“2001-01-01”。运行上面的代码,我得到以下错误:

??? Subscripted assignment dimension mismatch.

Error in ==> Test_Trades_part2 at 81
            data(i,7) = cell2mat(dates(1,i));

上面的代码与一个主代码相关联,该主代码从雅虎财经获取数据,然后将其放入我的 SQL 数据库中。

【问题讨论】:

  • 你不能在同一个矩阵中有字符串和双精度数。更好的选择是将所有内容都放在一个单元格中
  • 虽然无法将这样的单元格输入到 SQL 数据库中

标签: arrays string matlab concatenation cell


【解决方案1】:

使用datenum:以完全数字格式存储日期的便捷方法:

>> data(i,7) = datenum('2001-01-01');
>> disp(data(i,:))
       0           0           0           0           0           0      730852

这对您是否有用取决于您打算如何使用 SQL 数据库。然而,使用 MATLAB 转换回字符串很简单,使用 datestr 命令:

>> datestr(730852,'yyyy-mm-dd')
ans =
2001-01-01

附录:

序列日期编号表示日历日期,即自固定基准日期以来经过的天数。在 MATLAB 中,序列号 1 是 0000 年 1 月 1 日。

【讨论】:

    【解决方案2】:

    感谢大家的帮助!

    我使用以下方法解决了这个问题(结合结构,应该想到这一点..愚蠢的我):

     data = [open, close_price, high, low, volume, closeadj];
            s = struct('OpenPrice', data(:,1), 'ClosePrice', data(:,2), 'High', data(:,3), 'Low', data(:,4), 'Volume', data(:,5), 'Adj_Close', data(:,6), 'Dates', {dates});
    

    这样,我输入了结构中包含的所有值,避免了连接数字和字符串矩阵的需要。奇怪的是,不允许在矩阵中有这样的矩阵;我想这就是他们创建结构的原因。

    【讨论】:

      猜你喜欢
      • 2017-12-02
      • 2020-11-07
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多