我有一个结构为数据库的矩阵:
M = [ 2010 5 ; 2010 7 ; 2011 8 ; 2012 20 ];
如何检索 2010 年或 2011 年的所有年份?
我知道我可以这样做:
[ M(M(:,1)==2010,2) ; M(M(:,1)==2011,2) ]
但是我怎么能把它概括为任何年呢?
谢谢!
您的问题的确切答案是使用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
或者,如果您要为每个条目提供更多数字,则可能是一个结构数组,每个结构都有多个字段,其中一个是年份。我之前写过一个处理此类数据的方法。
但实际上,如果您的数据变得复杂并且您认为需要一个数据库,那么这可能不是解决您问题的正确语言。
这个怎么样:
% 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)