1

尝试以下串联时:

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 数据库中。

4

2 回答 2

0

以完全数字格式存储日期的一种便捷方法是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 日。

于 2013-10-13T20:59:07.743 回答
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});

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

于 2013-10-14T13:14:54.260 回答