将数字矩阵与1xn单元连接

时间:2013-10-13 11:29:41

标签: arrays string matlab concatenation cell

尝试以下连接时:

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));

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

附录:

  

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

答案 1 :(得分:0)

谢谢大家的帮助!

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

 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});

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