前の質問を展開して、次の要素を持つ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 」で提案されていますが、私はこの本を今手元に持っておらず、購入する余裕もありません。