0

evalMATLABの関数を使用して多数のパラメーター配列を作成しようとしています。

基本的にdata、ループを使用して生成された名前を持つ大きなデータセット ( ) をいくつかの小さなデータセットに分割しようとしています。現状では、私は使用しています:

variablename = ['a' num2str(academy) '_s' num2str(year) '_g' num2str(gender)];

        %loop through all people, if match various classifications, write to variablename
        for row = 1:totalrows;
            if data(row,2) == academy;
                if data(row,1) == year;
                    if data(row,70) == gender;
                         eval([variablename ' = [ data(row,8) data(row,9) data(row,73) data(row,76) data(row,77) data(row,78) data(row,79) ]; ' ]); % ; supresses output (i.e. stop it showing value of each variable                     


                    end%gender if
                end%year if
            end %academy if
        end %row loop

これはかなりうまく機能しますが、すべてのifステートメントに一致する 2 番目のレコードを取得するたびに、最初のデータ セットが上書きされます。

私の質問は、evalデータを書き込むために使用して作成された変数の行を指定するにはどうすればよいですか?

前もって感謝します

4

2 に答える 2

0

返信に促されて、フォーマットを確認したところ、次のことが機能しました

 eval([variablename '(row,:) = [ data(row,8) data(row,9) data(row,73) data(row,76) data(row,77) data(row,78) data(row,79) ]; ' ]); % ; supresses output (i.e. stop it showing value of each variable  
于 2012-05-29T03:48:05.450 に答える
0

EVAL を使用する代わりに、次のことを考慮してください。

data = [...];           %# some big matrix, rows are records, columns are fields

year = 2012;
gender = 2;             %# female
academy = 5;            %# corresponds to some meaningful value

cols = [8 9 73 76:79];  %# list of columns to select

%# get all rows matching the above conditions
idx = ( data(:,1)==year && data(:,70)==gender && data(:,2)==academy );
X = data(idx,cols);

このタイプの複数のクエリを実行している場合は、結果をセル配列に格納し、別の行列を保持してクエリ パラメータを格納できます。たとえば、次のようになります。

map(1,:) = [2012 2 5];  %# for the above query, with X{1} containing the data
map(2,:) = [2003 1 4];  %# for another query, with X{2} for corresponding data
于 2012-05-28T06:31:31.067 に答える