Matlab n个向量的k个向量组合之和

Matlab n个向量的k个向量组合之和,matlab,Matlab,我想要n个向量集合中的两个向量的和 对于eg 我想要I和j的所有值的总和(Ai+Aj)。 因此,如果n=10,那么我需要所有的组合,即10*9/2 并定义您自己的自定义度量,它将只是一个对两个向量求和的函数(尽管我感觉@plus将在您的情况下起作用,即pdist(X,@plus))看看 并定义您自己的自定义度量,它将只是一个对两个向量求和的函数(尽管我感觉@plus将在您的情况下起作用,即pdist(X,@plus))这里有一种手动计算的方法,假设n个向量集存储在矩阵a中,逐行: 获取所有可能的

我想要n个向量集合中的两个向量的和 对于eg

我想要I和j的所有值的总和(Ai+Aj)。 因此,如果n=10,那么我需要所有的组合,即10*9/2

并定义您自己的自定义度量,它将只是一个对两个向量求和的函数(尽管我感觉
@plus
将在您的情况下起作用,即
pdist(X,@plus)

看看


并定义您自己的自定义度量,它将只是一个对两个向量求和的函数(尽管我感觉
@plus
将在您的情况下起作用,即
pdist(X,@plus)

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

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

    [idx2, idx1] = find(ones(N, N));
    
    对应的对由下式给出:

    pairs = [idx1(:), idx2(:)];
    
    或者,如果您对重复不感兴趣(例如,您不想要A1+A1之和,等等),您可以使用
    nchoosek

    pairs = nchoosek(1:N, 2)
    idx1 = pairs(:, 1);
    idx2 = pairs(:, 2);
    
  • 使用每对索引对
    A
    中的相应行求和:

    sums = A(idx1(:), :) + A(idx2(:), :);
    
    或者,如果您想要每对Ai和Aj的元素总数,可以改为
    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
    

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

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

    [idx2, idx1] = find(ones(N, N));
    
    对应的对由下式给出:

    pairs = [idx1(:), idx2(:)];
    
    或者,如果您对重复不感兴趣(例如,您不想要A1+A1之和,等等),您可以使用
    nchoosek

    pairs = nchoosek(1:N, 2)
    idx1 = pairs(:, 1);
    idx2 = pairs(:, 2);
    
  • 使用每对索引对
    A
    中的相应行求和:

    sums = A(idx1(:), :) + A(idx2(:), :);
    
    或者,如果您想要每对Ai和Aj的元素总数,可以改为
    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
    

    让我们试一试,因为我不确定您是想要一个向量列表作为输出,还是一个总和列表,我将两者都提供给您

    A1=[1 2 3] 
    A2=[2 3 4] 
    A3=[3 4 5] 
    An=[6 6 9]
    
    首先,确保所有内容都放在一个矩阵中(如果需要,可以自动进行,但我希望您可以将此矩阵作为输入)

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

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

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

    让我们尝试一下,因为我不确定您是想要一个向量列表作为输出,还是想要一个我将同时提供给您的和列表

    A1=[1 2 3] 
    A2=[2 3 4] 
    A3=[3 4 5] 
    An=[6 6 9]
    
    首先,确保所有内容都放在一个矩阵中(如果需要,可以自动进行,但我希望您可以将此矩阵作为输入)

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

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

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

    需要注意的是,
    pdist
    需要安装统计工具箱。需要注意的是,
    pdist
    需要安装统计工具箱。请注意,如果您实际上只需要sumresult,通过提前计算每个向量的和,可以提高计算效率。请注意,如果您实际上只需要sumresult,那么通过提前计算每个向量的和,可以提高计算效率。