Matlab:拆分矩阵

时间:2012-10-25 13:32:13

标签: matlab

不确定如何做到这一点,这真的让我发疯。 我有一个包含3列的大矩阵显示:

  1. 年内销售的商品数量
  2. 物品出售的第一年
  3. 去年销售这些物品。
  4. 因此,在下面的例子中,2000年至2010年期间每年销售13件商品,2003年和2004年销售44件:

    Matrix_A = {13,    2000,    2010;
                44,    2003,    2004}
    

    我试图按年份将值分开来计算每年销售的商品总数。因此,在2003年和2004年将销售57件(13 + 44)件,在其他年份销售13件。

    结果矩阵如下所示:

    {13, 2000;
     13, 2001;
     13, 2002;
     13, 2003;
     13, 2004;
     13, 2005;
     13, 2006;
     13, 2007;
     13, 2008;
     13, 2009; 
     13, 2010;
     44, 2003;
     44, 2004}
    

    我已经尝试为每年创建一个单独的空矩阵,循环遍历Matrix_A并将该行分配给相应的年度矩阵。那么,对于Matrix_A:

    • 13将添加到2000年至2010年的矩阵中,
    • 44对于2003年和2004年的矩阵。

    但这似乎涉及动态变量名称,我无法实现。

    总之,我迷失了。有什么想法吗?

    谢谢!

3 个答案:

答案 0 :(得分:2)

这是一个简单的数据集循环,用于生成您在问题中显示的矩阵

B = [];
A = [13,    2000,    2010;
     44,    2003,    2004];

for i=1:size(A,1)
    years = [A(i,2):A(i,3)]';
    start = size(B, 1);
    B(start+1:start+numel(years),2) = years;
    B(start+1:start+numel(years),1) = A(i,1);
end
B =

      13        2000
      13        2001
      13        2002
      13        2003
      13        2004
      13        2005
      13        2006
      13        2007
      13        2008
      13        2009
      13        2010
      44        2003
      44        2004

答案 1 :(得分:0)

为什么每年都需要单独的矩阵?

您可以拥有一个数组,其中每个元素代表一年。第一个元素是第一年(第二列的最小值)。

编辑:使用cell s对非标量元素也可以这样做(见下面的评论)

答案 2 :(得分:0)

您可以使用MATLAB的矩阵索引功能来实现此目的。无论您使用多少年份或产品,这种方法都应该有效。

A = [13,2000,2010;44,2003,2004];
%# grab the earliest year in your matrix
firstYear = min(A(:,2));
%# grab the last year in your matrix
lastYear = max(A(:,3));
%# create a list of all years
years = firstYear:lastYear;
%# initialize the product sum for each year
productTotals = zeros(size(years));
% loop through and add up your totals
for yy = 1:numel(years)
for aa = 1:size(A,1)
%# check to see if the product was sold that year
if years(yy)>=A(aa,2) && years(yy)<=A(aa,3)
productTotals(yy) = productTotals(yy) + A(aa,1);
end
end
end