我想从一组 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
我想从一组 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
这是一种手动计算的方法,假设 n 个向量的集合A
逐行存储在一个矩阵中:
获取所有可能的索引对(有关可能的答案,请参阅此问题)。例如:
[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);
使用每对索引对 中的相应行求和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
看看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)
)
让我们试一试,因为我不确定你是想要一个向量列表作为输出还是一个总和列表,我会给你两个。
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')
添加对称变化或者将向量与其自身组合的情况应该不会太难,但考虑到您期望的组合数量,这应该是您正在寻找的。