不确定如何做到这一点,这真的让我发疯。 我有一个包含3列的大矩阵显示:
因此,在下面的例子中,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:
但这似乎涉及动态变量名称,我无法实现。
总之,我迷失了。有什么想法吗?
谢谢!
答案 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