0

たとえば、n ベクトルのセットから一度に 2 つのベクトルの合計が必要です。

A1=[1 2 3] 
A2=[2 3 4] 
A3=[3 4 5]
.
.
.
An=[6 6 9]

i と j のすべての値に対して (Ai + Aj) の合計が必要です。したがって、n=10 の場合、すべての組み合わせ、つまり 10*9/2 が必要です。

4

3 に答える 3

2

n 個のベクトルのセットが行列Aに行ごとに格納されていると仮定して、手動で計算する方法を次に示します。

  1. 考えられるすべてのインデックスのペアを取得します (考えられる答えについては、この質問を参照してください)。例えば:

    [idx2, idx1] = find(ones(N, N));
    

    対応するペアは次のように与えられます。

    pairs = [idx1(:), idx2(:)];
    

    あるいは、繰り返しに興味がない場合 (たとえば、 A 1 +A 1の合計を求めたくない場合など) は、次のように使用できますnchoosek

    pairs = nchoosek(1:N, 2)
    idx1 = pairs(:, 1);
    idx2 = pairs(:, 2);
    
  2. インデックスの各ペアを使用して、 の対応する行を合計しますA

    sums = A(idx1(:), :) + A(idx2(:), :);
    

    あるいは、A iと A jの各ペアの要素の総和が必要な場合は、代わりに行うことができますsum(A(idx1(:), :) + A(idx2(:), :), 2)

の例を次に示しN = 3ます。

A = [1 2 3; 2 3 4; 3 4 5];
N = size(A, 1);
[idx2, idx1] = find(ones(N, N));
pairs = [idx1(:), idx2(:)];
sums = A(idx1(:), :) + A(idx2(:), :);

結果は次のとおりです。

pairs =
     1     1
     1     2
     1     3
     2     1
     2     2
     2     3
     3     1
     3     2
     3     3

sums =      
     2     4     6
     3     5     7
     4     6     8
     3     5     7
     4     6     8
     5     7     9
     4     6     8
     5     7     9
     6     8    10
于 2013-04-11T11:47:19.570 に答える