-1

前の質問を展開して、次の要素を持つ2つの行列を操作する方法を理解しようとしています(答えやすくするために問題を単純化しようとします) :

最初の行列:

          8 2 5
Mat1 = [  3 7 8 ] 
          6 5 0 

2 番目のマトリックス:

         Value(Mat1(1)) Value(Mat1(4)) Value(Mat1(7))
Mat2 = [ Value(Mat1(2)) Value(Mat1(5)) Value(Mat1(8)) ]
         Value(Mat1(3)) Value(Mat1(6)) Value(Mat1(9))

2 番目のマトリックス値が次のとおりであると仮定しましょう。

              18 22 47
Val.Mat2 = [  28 84 82 ] 
              56 65 0

ここで、 Val.Mat2: の値を累積VM2CS = cumsum(sort(Val.Mat2))し、列ごとに集計制約を設定し、cstr = 100;制約の結果を行列で収集します。result = sum(VM2CS <= cnstrn);

         18  22   0
VM2CS =  46  87  47
        102 171 129 

result = 2 2 2                            

######################## 問題 (複雑さが増す 2 つの側面) ################


  • 側面 1: cumsum が zero(0) の要素を無視する方法。したがって、結果は次のようになります result = 2 2 1。私は試しました:result = sum(cumsum(sort(VM2CS))<=cstr ~=0)成功しませんでした。
  • 側面 2:Mat1要素はMat2マトリックス内で繰り返されます (pe Mat1(1) 要素は Mat1(8) と同じで、値はそれぞれ 18 と 82 です。Mat1(6) と Mat1(7) も繰り返されます)。パースペクティブを使用して最終結果で同じ要素を1回だけ使用して、行ごとに同じ数の一意の要素を含めるにはどうすればよいですか(ゼロ(0)を除外)? 期待される結果は次のとおりです。
                     18 22 47
 result_expected = [ 28 54  0 ]
                      0  0  0

側面 2 に答えるのは簡単ではないことはわかっていますが、解決策を指摘することも役立つはずです。同じ有用な例がThomas G. Robertazzi教授によって「 Planning Telecommunication Networks 」で提案されていますが、私はこの本を今手元に持っておらず、購入する余裕もありません。

4

1 に答える 1

1

最初の部分では、単純に次を使用します。

result = sum((VM2CS <= cstr) & (VM2CS ~= 0));

2 番目の部分では、値 56 がなくなったのはなぜですか?

于 2012-12-06T19:38:30.770 に答える