0

我想从一组 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

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 回答
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)

于 2013-04-11T11:31:01.990 回答
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')

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

于 2013-04-11T16:19:46.737 回答