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