R到Matlab:外积(%o%)和lower.tri函数

时间:2013-01-30 23:03:20

标签: matlab for-loop

列表(1,2,3,4,5)可以有5 * 4/2 = 10种组合。如果我想进行成对乘法,我会在R中执行以下操作:

x <- 1:5
mx <- x%o%x
mx
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    2    4    6    8   10
[3,]    3    6    9   12   15
[4,]    4    8   12   16   20
[5,]    5   10   15   20   25
mx <- mx[lower.tri(mx)]
mx
[1] 2  3  4  5  6  8 10 12 15 20

我怎样才能在MATLAB中做到这一点?

2 个答案:

答案 0 :(得分:1)

只需执行n-by-1数组和1-by-n数组的矩阵乘法:

out = (1:5)' * (1:5)

out =

     1     2     3     4     5
     2     4     6     8    10
     3     6     9    12    15
     4     8    12    16    20
     5    10    15    20    25

要获得对角线以下的值,您可以执行以下操作

idx = tril(true(5),-1);
mx = out(idx)

答案 1 :(得分:0)

以下是有效的,但如果我能找到一种避免额外代码行的方法,我会更开心(更新: @Jonas提供了更简洁的解决方案+1):

A = [1 2 3 4 5];
B = A' * A;
C = triu(B, 1);
C = sort(C(C ~= 0));

C' =

     2     3     4     5     6     8    10    12    15    20