我想创建一个目标矢量。其中我遇到了一些问题。 我想要的是从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的位置写1,2,3 ......时,上面的代码工作正常。(TNames {idx(i,1)}).. T.(TNames {idx(i,2)})和T.(TNames {idx(i,3)})
我曾尝试过不同的选择,但我无法解决这个问题。我甚至可以创建一个目标< 3 * 859 cell>但神经网络是不可接受的。它需要是< 1 * 859细胞>神经网络正常工作..所以,有人可以帮助我解决这个问题吗?
我也试过这个:
T是< 1 * 1结构>在我的内心 18个Fints(金融时间序列)对象,每个对象859行 和不同的列(范围从1到4列 在每个fints对象中)..我已经转换了所有这些fints 通过fts2mat命令将对象转换为矩阵。
现在我有了新的矩阵< 32 * 859 double>可识别的 在每个列范围中查找对象。即我可以识别 每列中的前四个条目属于第一个 fints对象和接下来的3个条目属于第二个fints 对象等等。
我想抓住所有组合(816种组合) 在这样的新矩阵中有3个fints对象(18个中的对象) 最终可以将其转换为< 859 * 1单元格>的方法要么 < 1 * 859细胞> (更确切地说)为神经提供 网络进行适当的培训......
此任务必须通过索引来完成,因为每个 3的组合应该包含3个fints对象条目 每个fints对象有不同的no。列。 而且我必须装饰每个fints对象的所有列 每次都在我的816组合中并将它们连接起来 3个fints对象。取每个鳍的所有列 对象并将其放入行中。
简而言之,我应该有< 1 * 859 cell>其中有 816个不同组合的3个鳍对象(出于 我的T结构)和每个组合应该有3个fints 其中的对象和每个组合应该是 < 1 * 859细胞>将它提供给神经网络以使其适当 训练。由于NN不采用不同的维度单元格。
我提前感谢你
答案 0 :(得分: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}