Arrays 单元格、结构和;矩阵-循环和分配数据

Arrays 单元格、结构和;矩阵-循环和分配数据,arrays,matlab,struct,import,indexing,Arrays,Matlab,Struct,Import,Indexing,正如标题所示,这可能是一个索引问题,但也可能与不兼容有关。我有多组数据,都是混合对象类型;矩阵、结构、双精度、字符、单元格。 我想要实现的非常简单:我有一个来自matlab社区的函数,允许我从Yahoo提取股票价格数据。此函数如下所示: market_data = hist_stock_data('start_date','end_date','name_of_stock') 这个函数返回一个包含8个字段的结构-1个字符,1个单元格和6个双精度,我已经成功地为一个股票实现了它-但是我需要更多!

正如标题所示,这可能是一个索引问题,但也可能与不兼容有关。我有多组数据,都是混合对象类型;矩阵、结构、双精度、字符、单元格。 我想要实现的非常简单:我有一个来自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()等)时也会遇到问题


如果我能提供更多信息,我将不胜感激-请告诉我!假设
hist_stock_data
无法获取股票名称的单元格数组并返回相应的结构数组(值得检查),它非常简单:

for ii=1:numel(stock_names)
    market_data(ii) = hist_stock_data(start_date, end_date, stock_names{ii});
end
然后,您可以通过连接将结构数组中的字段提取到向量中:

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
对结果单元格数组的各个行执行操作


请注意,单元格数组仍然不介意每个股票的数据大小是否不同-在分析中处理这一点可能非常重要,因为正确的方法(池、截断、零填充、插值等)取决于数据以及您使用它的具体操作。

好吧,我会被取消-第一部分至少工作得很好!我现在有了一个结构,根据各自字段中的每个股票返回8个变量。(在本例中为1x30结构).不过,我无法修改你答案的第二部分-我得到的信息是,
horzcat
不能使用,因为m参数不一致。我检查了几个,它们都是[1x23]。我需要预定义“价格”变量吗?很遗憾,函数
hist\u stock\u data
无法获取单元格数组。@DexterMorgan啊,不知怎的,我假设
price
是一个标量-
vertcat(market\u data.price)
可能更合适,但如果数据不一致,您可能需要使用单元格数组-我对我的答案进行了一些概括,希望能有所帮助。非常感谢您的帮助,@Notlikethat!我已经成功地将价格字段从结构中取出,放入一个单元格,然后使用
cell2mat
转换为矩阵形式。要达到这一点,我必须手动调整价格字段的长度,使其全部为偶数(因此“numel(market_data.price)”为常数),这样任何形式的连接都会起作用。这也有点复杂,例如,我想用平均值来填充它们。有什么想法吗?一旦我能将这部分自动化,我想我就成功了!我总共只使用matlab编程了一周,所以我花了很多时间!