0

これを行う方法がわからない、それは本当に私を夢中にさせています。私は3つの列を示す大きなマトリックスを持っています:

  1. 年間の販売アイテム数
  2. アイテムが販売された最初の年
  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の場合:

  • 2000年から2010年までのマトリックスに13が追加され、
  • 2003年と2004年のマトリックスに44。

しかし、これには動的変数名が関係しているようで、実装できません。

全体として、私は迷子になっています。何か案は?

ありがとう!

4

3 に答える 3

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
于 2012-10-25T13:40:45.710 に答える
0

なぜ毎年別々のマトリックスが必要なのですか?

各要素が年を表す配列を持つことができます。最初の要素は最初の年です(2番目の列の最小値)。

編集:sを使用して非スカラー要素でも同じことができますcell(以下のコメントを参照)

于 2012-10-25T13:41:27.650 に答える
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
于 2012-10-25T13:50:42.950 に答える