2

データベースとして構造化されたマトリックスがあります。

M = [ 2010 5 ; 2010 7 ; 2011 8 ; 2012 20 ];

2010 年または 2011 年をすべて取得するにはどうすればよいですか?

私はできることを知っています:

[ M(M(:,1)==2010,2) ; M(M(:,1)==2011,2) ]

しかし、これを何年にもわたって一般化するにはどうすればよいでしょうか。

ありがとう!

4

2 に答える 2

4

あなたの質問に対する正確な答えは、次を使用することismemberです:

octave> years = [2010 2011];
octave> ismember (M(:,1), years)
ans =

   1
   1
   1
   0

octave> M(ismember (M(:,1), years), 2)
ans =

   5
   7
   8

ただし、データをどうするかによっては、別の方法で並べ替えた方がよい場合があります。たとえば、セル配列で、年ごとに 1 つのセルが値の配列を保持しているとします。

octave> M([2010 2011 2012]) = {[5 7] [8] [20]};
octave> M{2010}
  ans =

     5   7

または、各エントリの数値を増やす場合は、各構造体が複数のフィールドを持つ構造体配列で、そのうちの 1 つが年になります。そのようなデータを処理するためのレシピを以前に書いたことがあります。

しかし、実際には、データが複雑になり、データベースが必要だと思われる場合、これは問題を解決するための適切な言語ではない可能性があります。

于 2013-08-14T02:28:54.180 に答える
0

これはどう:

% Specify the years you're interested in
myyears = [2010, 2011];
% Get the row indices of those years
rowidx = ismember(M(:,1), myyears);
% Display the values (column 2) for those rows
M(rowidx, 2)
于 2013-08-14T08:25:07.250 に答える