正如标题所示,这可能是一个索引问题,但也可能是不兼容问题。我有一组数据,都是混合对象类型;矩阵,结构,双,char,细胞。 我想要实现的很简单:我有一个来自matlab社区的函数,它允许我从Yahoo中提取股票价格数据。此功能如下所示:
market_data = hist_stock_data('start_date','end_date','name_of_stock')
这个函数返回一个带有8个字段的结构--1个字符,1个单元格和6个双字节,我已经成功地为一个单独的库存实现了它 - 但我需要更多! 我将库存的名称保存在一个单独的文件中,目前作为一个单元格,每个库存在一行中,如果被调用则显示为字符串,例如'ADS.DE'(阿迪达斯股票名称)。这些字符串有6或7个字符,即不均匀。我也把文件保存在文本中,所以也许有一个单元格的替代品?来自Matlab的Snipet:
stock_names =
'ADS.DE'
'ALV.DE'
'BAS.DE'
'BAYN.DE'
'BEI.DE'
'BMW.DE'
我想要做的是创建我自己的函数,只需使用for循环或类似的东西,为我的列表中的每个股票执行上面的'hist_stock_data'函数,然后从每个库中提取返回的相应结构,一些选定的字段(包括每种字段中的一种,char,cell和double)。
理想情况下,我最后会有一个矩阵,我的列表中每个股票只有一列。
我知道我可以通过例如:
从结构中提取它们struct.price % the stock price field of a given struct
但我也有问题将其插入另一个矩阵或其他我可以对其进行进一步数学分析的地方(函数:cov(),corr(),eig()等)。
如果有任何帮助和建议,我将不胜感激 - 如果我能提供更多信息,请告诉我!
答案 0 :(得分:1)
假设hist_stock_data
无法获取股票名称的单元格数组并返回相应的结构数组(值得检查),它就像这样简单:
for ii=1:numel(stock_names)
market_data(ii) = hist_stock_data(start_date, end_date, stock_names{ii});
end
然后,您可以将struct数组中的字段提取为带连接的向量:
vector_data = [market_data.scalar_field];
matrix_data = [market_data.column_vector_field]; % or,
matrix_data = vertcat(market_data.row_vector_field]);
cell_data = {market_data.nonscalar_field};
对某些事情可能有用:
prices = {market_data.price}; % assuming price is a vector
avgprices = cellfun(@mean, prices);
或者,您可能更愿意将结构数组传递给struct2cell
,而只是使用cell2mat
或cellfun
来处理结果的各个行,而不是单独提取每个字段。细胞阵列。
请注意,如果每个库存的数据大小不同,单元格数组仍然不介意 - 在分析中处理此问题可能不是一件容易的事情,因为正确的方法(池,截断,零填充,插值等)。 )取决于数据以及你正在做什么。