2012-07-26 2 views
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 

위의 코드는 잘 작동 (:, :, 난() : : i) 및이의 장소에서 ... 등등 ... 1,2,3 쓰기 대상에서 (TNames {idx (i, 3)})

나는 다른 시도했다. 대안들 그러나 나는이 문제를 고칠 수 없다. 나는 목표물을 만들 수 있었다 심지어 < 3 * 859 cell> 그러나 신경망에는 받아 들일 수 없다. 신경망이 제대로 작동하려면 < 1 * 859 cell>이되어야합니다. 누군가가 나를이 문제를 해결하도록 도울 수 있습니까?

난이 시도 :

T 제가 18 fints을 갖는 내부 < 1 * 1 구조체> (금융 시계열) 859 행의 객체 각각 다른 1 범위 컬럼 (전혀 4 columns 각 fints 개체에서) .. fts2mat 명령을 통해 모든 해당 fints 개체를 매트릭스로 변환했습니다.

이제 각 행 범위에 식별 가능한 fints 개체가있는 < 32 * 859 double>이라는 새로운 행렬이 생겼습니다. 즉, 을 식별 할 수 있습니다. 각 열의 처음 네 항목은 첫 번째 fints 객체에 속하며 다음 세 항목은 두 번째 fints 객체에 속합니다.

는 I 모든 조합 (816 조합)을 잡아 원하는 3 fints의 새 등 의 행렬 마지막 < 859 * 1 셀로 변환 할 수있는 방법> 또는 < 1 (18 중) 개체 3의 각 조합이해야 각 fints 객체가있는 항목 3 fints를 포함 객체 때문에 * 859 셀> (더 정확하게)

이 작업은 색인을 통해 수행되어야한다 ... 적절한 훈련에 대한 신경 네트워크에 그것을 제공 다른 번호를 가지고. 열의 그리고 각 fints 객체의 모든 열을 복화해야합니다. 내 816 개의 조합에 매번 을 연결하고 이들을 연결합니다. 3 개의 fint 객체가 있습니다. 각각의 모든 열을 가지고 객체를 가져 와서 행에 넣습니다. 요컨대

I 3 fints 객체 816 가지의 조합 ( 내 T 구조체)의 개 존재하는 < 1 × 859 세포>를 가져야하고 각 조합은 3 fints에게 그것에 객체를 가져야하고 각 조합해야 < 1 * 859 cell>을 사용하여 적절한 교육을위한 신경망에 제공 할 수 있습니다. NN은 다른 차원 셀을 사용하지 않으므로 ...

%# 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! 

과 불평 할 것이다 : MATLAB의 행렬/벡터 만의 일관된 요소를 저장할 수 있습니다

Error using horzcat 
CAT arguments dimensions are not consistent. 

나는 문제를 설명하기 위해 사전

+1

에 해당하는 "다른 크기의 물체를?" – sfstewman

+1

'TNames'에 들어있는 예제를 줄 수 있습니까? 3x1이 아닌 공간에 3x1 항목 (등호의 오른쪽면)을 배치하는 것 같습니다. –

+0

T는 <1*1 struct>입니다. 그 안에는 859 개의 행과 18 개의 행이없는 18 개의 fints 객체가 있습니다. 새 행렬에서 3fints 객체의 모든 조합 (816 조합)을 얻고 싶습니다. <859*1 cell> 신경 네트워크에 제공 ... –

답변

0

예에 감사합니다 같은 유형. 마지막 조합이 될 것이다 예를 들어

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 

: 여기에 하나는 셀 어레이를 사용하려면 스칼라, 다른 2 별 2 매트릭스, 마지막 문자열 ...

입니다 :

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

당신의 예를 들어 줄 수 {T.b T.c T.d}

+0

<1*859 cell> 차원에서 뉴런 네트워크의 대상으로 C 매트릭스를 제공해야합니다. 여기 C가 <816*1 cell>인데 신경 네트워크가 목표 출력으로 사용하지 않습니다 ... –

+0

@ shahabshah : 내 요점은 당신이 하나의 행렬에 결합하려는 "객체"의 크기/유형을 알아야한다는 것이 었습니다. 호환성/일관성이 없으면 셀 배열에 저장해야합니다. 그 점이 위의 예제에 의해 명확 해지기를 바랍니다. – Amro

+0

감사합니다 Amro : 내 제안에 대한 약간의 수정을 통해 저의 제안은 정말 효과적이었습니다 ... Thanks Again ... 정말 도움이됩니다 ... –