所有独特的乘法产品

时间:2019-03-20 20:17:56

标签: matlab vector

我想获取给定向量的所有 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可能包含重复的编号,从而导致重复的产品-必须保留这些产品。

4 个答案:

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