尝试以下连接时:
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数据库中。
答案 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});
这样,我输入结构中包含的所有值,避免了连接数字和字符串矩阵的需要。奇怪的是,不允许在矩阵中使用这样的矩阵;我想这就是他们创造结构的原因。