1

列表 (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 中做到这一点?

4

2 回答 2

1

只需执行 n×1 数组和 1×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)
于 2013-01-30T23:13:34.317 回答
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
于 2013-01-30T23:15:50.207 回答