【问题标题】:Using consecutive matrices in Matlab在 Matlab 中使用连续矩阵
【发布时间】:2012-05-07 19:25:27
【问题描述】:

我正在创建一个函数以在分析工作室中使用多个矩阵。

这些矩阵具有相同的名称,名称中带有日期参考(月到月和年到年:nov-1956 是 matrix5611,dec-1956 是 matrix5612,jan-1957 是 matrix5712 ,以此类推,直到 1999 年底。

应该对每个月/年的平均值进行比较(取决于您关注的研究领域)。

我正在尝试使用一些循环来改变输入矩阵的名称,而不是按日期手动编写日期,但是一个有用的函数会很有用。

任何想法或有用的功能?

【问题讨论】:

  • S = load('mydata.mat'); 非常有用,您可以使用动态字段名称进行结构访问。

标签: matlab matrix


【解决方案1】:

如果您的数据在不同的矩阵中,您可以使用eval 将平均值存储到某个矩阵中,在此示例中为MeanMatrix,其中Y 维是年,X 维是月:

编辑:它不是来自 5611 的流水号,而是 yymm...

编辑:似乎矩阵不是从 1956 年 1 月开始,而是从 1956 年 11 月开始。

% add here missing months matrix index strings.

MissingMatricesCellArray = {'5601', '5602', '5603', '5604', '5605', '5606', '5607', '5608', '5609', '5610'};

% MissingmatricesCellArray = {};

for Year = 56:99
    for Month = 1:12
        NumString = sprintf('%02d%02d', Year, Month);

        % calculate and store means only for matrices that are not missing.
        if ~(ismember (cellstr(NumString), MissingMatricesCellArray))
            MeanMatrix(Year,Month) = mean(mean(eval ([ 'matrix', NumString ])));
        end
     end
end

然后您可以按照自己的方式比较月份和年份的平均值。

【讨论】:

  • 感谢您的编辑。这两个答案现在都有很多意义
【解决方案2】:

我更愿意为此使用元胞数组而不是 eval

for y = 56:99 % for each year 
    for m = 1:12 % for each month    
      ind = createYearMonthInd(y,m);
      matrix{ind} = ...  % whatever you want here (note the curly braces)
   end 
end 


function ind = createYearMonthInd(y,m)
     ind = y * 100 + m;

【讨论】:

  • 我了解到 OP 已将原始数据作为单独的矩阵接收,命名为 matrix5611matrix5612matrix5701 等等,因此使用任何更方便的数据存储形式(例如一个单元格数组或一个矩阵用于所有数据)需要首先从单独的矩阵进行转换,我认为您需要使用 eval 或者生成并运行自定义函数。
  • 同意,如果 OP 如此受限,那么他就是。我只是想让他知道这个功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
相关资源
最近更新 更多