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

但是,根据您对数据的处理方式,以其他方式重新排列可能会更好。例如,可能是一个单元格数组,每年一个单元格包含一个包含值的数组。

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

     5   7

或者,如果您要为每个条目提供更多数字,则可能是一个结构数组,每个结构都有多个字段,其中一个是年份。我之前写过一个处理此类数据的方法。

但实际上,如果您的数据变得复杂并且您认为需要一个数据库,那么这可能不是解决您问题的正确语言。

于 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 回答