来自n个向量的k个向量组合的总和

时间:2013-04-11 11:29:10

标签: matlab

我想要从n个向量的集合中得到两个向量的总和 例如;

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

3 个答案:

答案 0 :(得分:2)

这是一种手动计算的方法,假设n个向量的集合逐行存储在矩阵A中:

  1. 获取所有可能的索引对(有关可能的答案,请参阅this question)。例如:

    [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)

  3. 实施例

    以下是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
    

答案 1 :(得分:1)

查看pdist

pdist(X) computes the Euclidean distance between pairs of objects in m-by-n data matrix X. Rows of X correspond to observations, and columns correspond to variables.

定义你自己的自定义指标,它只是一个对两个向量求和的函数(虽然我觉得@plus会在你的情况下起作用,即pdist(X, @plus)

答案 2 :(得分:0)

让我们试一试,因为我不确定你是想要一个矢量列表作为输出还是我会给你两者的总和列表。

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

首先确保所有内容都放在一个矩阵中(如果需要可以自动化,但我希望你能把这个矩阵作为输入)

A = [A1;A2;A3;An]

现在我们可以使用一个小循环来简单地处理组合:

n = size(A,1);
m = size(A,2);
nr_comb = (n*(n-1))/2;
pair = zeros(nr_comb,2);
result = zeros(nr_comb,m);
count = 0;
for i = 1:n-1;
   for j = i+1:n
       count = count +1;
       pair(count,:) = [i j];
       result(count,:) = A(i,:) + A(j,:);
   end
end

现在假设您实际上想要矢量组合的总和,您可以轻松地得到它们:

sumresult = sum(result')

添加对称变体或者将矢量与自身组合的情况应该不会太难,但考虑到您期望的组合数量,这应该是您正在寻找的。