0

我想创建一个目标向量。我遇到了一些问题。我想要的是从 T 到 Target 的 18 个对象的 3 的所有组合。但它无法产生这种组合。它单独适用于每个组合,但对我来说“for循环”似乎不起作用。

% T is a structure of 18 different sized objects  

% idx is index of size 816*3 double 
idx = combnk(1:18,3);    

% TNames is cell of size 18*1 
TNames = fieldnames(T);  

for i = 1:length(idx) 

  Target(:,:,i) = [T.(TNames{idx(i,1)}) ; 
                   T.(TNames{idx(i,2)}) ; 
                   T.(TNames{idx(i,3)}) ]; 

end

当我从 Target(:,:,i) 中删除 (:,:,i) 并在 T.(TNames{idx( i,1)})..T.(TNames{idx(i,2)}) 和 T.(TNames{idx(i,3)})

我尝试了不同的替代方案,但我无法解决这个问题。我什至能够创建一个目标 <3*859 cell>,但神经网络不能接受它。神经网络需要 <1*859 cell> 才能正常工作。那么,有人可以帮我解决这个问题吗?

我也试过这个:

T 是一个 <1*1 结构>,其中我有 18 个 fints(金融时间序列)对象,每个对象有 859 行,并且列数不同(每个 fints 对象中的列从 1 到 4 列不等)..我已经转换了所有这些 fints 对象通过 fts2mat 命令到矩阵。

现在我有新的矩阵 <32*859 double> 在每列范围内都有可识别的 fints 对象。即我可以确定每列中的前四个条目属于第一个 fints 对象,接下来的 3 个条目属于第二个 fints 对象,依此类推。

我想在一个新矩阵中抓取 3 个 fints 对象(共 18 个)的所有组合(816 个组合),最终可以将其转换为 <859*1 cell> 或 <1*859 cell> (更准确地说) 将其提供给神经网络进行适当的训练......

这个任务必须通过索引来完成,因为 3 的每个组合都应该包含 3 个 fints 对象条目,每个 fints 对象都有不同的编号。的列。而且我每次都必须在我的 816 个组合中对每个 fints 对象的所有列进行装扮,并将这 3 个 fints 对象连接起来。获取每个 fints 对象的所有列并将其放在行中。

简而言之,我应该有 <1*859 cell> 其中有 3 个 fints 对象的 816 种不同组合(在我的 T 结构中),每个组合应该有 3 个 fints 对象,每个组合应该是 <1*859 单元格> 将其提供给神经网络进行适当的训练。由于NN不采用不同维度的单元格..

我提前谢谢你

4

1 回答 1

0

一个例子来说明这个问题:

%# structure with 4 "differently sized objects"
T = struct('a',1, 'b',rand(2,2), 'c','string', 'd',{{1 2}})

%# what you are trying to do in the loop is:
[T.a T.b T.c]             %# <---- ERROR!

这会抱怨:

Error using horzcat
CAT arguments dimensions are not consistent.

MATLAB 矩阵/向量只能存储相同类型的一致元素。这里一个是标量,另一个是 2×2 矩阵,最后一个是字符串...

您想使用元胞数组:

TNames = fieldnames(T);
idx = nchoosek(1:numel(TNames),3);

C = cell(size(idx,1),1);
for i=1:size(idx,1)
    C{i} = {T.(TNames{idx(i,1)}) T.(TNames{idx(i,2)}) T.(TNames{idx(i,3)})};
end

例如,最后一个组合是:

>> C{end}
ans = 
    [2x2 double]    'string'    {1x2 cell}

对应于{T.b T.c T.d}

于 2012-07-27T01:15:02.573 回答