我想获取给定向量的所有 unique 乘积。
例如,给定a
:
a = [4,10,12,3,6]
我想获得一个包含以下结果的矩阵:
4*10
4*12
4*3
4*6
10*12
10*3
10*6
12*3
12*6
3*6
在MATLAB中是否有简短和/或快速的方法?
编辑:a
可能包含重复的编号,从而导致重复的产品-必须保留这些产品。
答案 0 :(得分:3)
给出:
a =
4 10 12 3 6
构造所有成对乘积的矩阵:
>> all_products = a .* a.'
all_products =
16 40 48 12 24
40 100 120 30 60
48 120 144 36 72
12 30 36 9 18
24 60 72 18 36
现在,构造一个掩码以仅将那些值保持在主对角线以下:
>> mask = tril(true(size(all_products)), -1)
mask =
0 0 0 0 0
1 0 0 0 0
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
并将遮罩应用于产品矩阵:
>> unique_products = all_products(mask)
unique_products =
40
48
12
24
120
30
60
36
72
18
答案 1 :(得分:3)
如果拥有统计信息工具箱,则可以滥用pdist
,该方法仅考虑每对两个可能的订单之一:
Assets.xcassets
答案 2 :(得分:2)
一个选项涉及nchoosek
,该向量返回向量中k
个元素的所有组合,每一行都是一个组合。 prod
计算行或列的乘积:
a = [4,10,12,3,6];
b = nchoosek(a,2);
b = prod(b,2); % 2 indicates rows
答案 3 :(得分:0)
尝试从此开始。让独特的功能滤除乘以a的结果。
b = unique(a*a')