Matlab n个向量的k个向量组合之和
我想要n个向量集合中的两个向量的和 对于eg 我想要I和j的所有值的总和(Ai+Aj)。 因此,如果n=10,那么我需要所有的组合,即10*9/2 并定义您自己的自定义度量,它将只是一个对两个向量求和的函数(尽管我感觉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中,逐行: 获取所有可能的
@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,那么通过提前计算每个向量的和,可以提高计算效率。