How can I get the sums of all possible combinations of the values of a vector?
33 ビュー (過去 30 日間)
古いコメントを表示
Dear all,
I would like to get the sums of all unique possible combinations of the values of a vector.
For example:
Input:
A = [10 20 30]
Output:
B = [10 20 30 (10+20) (10+30) (20+30) (10+20+30)]
If possible, I would also like to get the indices of the values used to get the sum, so:
C = [1 2 3 (1,2) (1,3) (2,3) (1,2,3)]
The output does not necessarily have to be a vector.
The length of the input vector (A) will vary from iterations to iterations, so I'm looking for a way to calculate B and C based on a changing vector A
All help would be greatly appreciated!
3 件のコメント
Adam Danz
2021 年 8 月 19 日
編集済み: Adam Danz
2021 年 8 月 19 日
Agreed, the cell array is the way to go. Simple indexing,
b(i)
c{i}
However, there could be multiple solutions to the problem you described. For example, a vector [1 2 3 4] will result in two values of 3 (3, 1+2), two values of 4 (4, 1+3), two values of five, two values of 6, and two values of 7. So if you're trying to find the closest value in b to some target value, there may be a problem.
採用された回答
Adam Danz
2021 年 8 月 19 日
% Input: v, a row or column vector
v = [2 4 6 8];
% create permutations and summation results
n = numel(v);
vIdx = 1:n;
results = cell(n,2);
for i = 1:n
results{i,1} = num2cell(nchoosek(vIdx,i),2)';
results{i,2} = sum(nchoosek(v,i),2)';
end
% Results
% b: 1xm row vector of summation results
% c: 1xm cell array of indicies of v for each summation
b = [results{:,2}]
c = horzcat(results{:,1})
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!