0

ターゲット ベクターを作成したい。私はいくつかの問題を抱えています。私が欲しいのは、T からターゲットへの 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) を削除し、1,2,3 ... などを T.(TNames{idx( i,1)})..T.(TNames{idx(i,2)}) および T.(TNames{idx(i,3)})

さまざまな代替手段を試しましたが、この問題を解決できません.ターゲット <3*859 セル> を作成することさえできましたが、ニューラル ネットワークには受け入れられません。ニューラルネットが適切に機能するには、<1*859 セル> である必要があります..では、誰かこの問題を解決するのを手伝ってくれませんか?

私もこれを試しました:

T は <1*1 構造体> であり、その中にそれぞれ 859 行の 18 個のフィント (金融時系列) オブジェクトがあり、列の数が異なります (各フィント オブジェクトの 1 から 4 列の範囲)。..これらすべてのフィント オブジェクトを変換しましたfts2mat コマンドで行列に変換します。

これで、各列範囲に識別可能なフィント オブジェクトを持つ新しいマトリックス <32*859 double> ができました。つまり、各列の最初の 4 つのエントリが最初の fints オブジェクトに属し、次の 3 つのエントリが 2 番目の fints オブジェクトに属していることがわかります。

最終的に <859*1 cell> または <1*859 cell> (より正確には)適切なトレーニングのためにそれをニューラルネットワークに提供します...

3 の各組み合わせには 3 つのフィント オブジェクト エントリが含まれ、各フィント オブジェクトは異なる番号を持つ必要があるため、このタスクはインデックス作成を通じて実行する必要があります。列の。そして、816 通りの組み合わせで毎回各 fints オブジェクトのすべての列をガーブし、それら 3 つの fints オブジェクトを連結する必要があります。各fintsオブジェクトのすべての列を取得して行に配置します。

要するに、<1*859 セル> が必要で、そこには (私の T 構造体から) 3 つのフィント オブジェクトの 816 の異なる組み合わせがあり、各組み合わせには 3 つのフィント オブジェクトが含まれ、各組み合わせは <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 行列/ベクトルは、同じ型の一貫した要素のみを格納できます。1 つはスカラー、もう 1 つは 2 行 2 列の行列、最後の 1 つは文字列です...

セル配列を使用したい場合:

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 に答える