我试图用Python生成这个[50 x 50]矩阵:
n = 50
a = np.linspace(-5, 5, n).reshape(-1,1)
b = a
np.sum(a**2, 1).reshape(-1, 1) + np.sum(b**2, 1)
使用R.问题是结果是某种矩阵,无法通过以下方式再现:
n = 50
a = seq(-5, 5, length.out = n)
b = a
a^2 + b^2
生成矢量。
我不熟悉Python中的对象名称,但我发现np.sum(a**2, 1).reshape(-1, 1)
产生的内容看起来像[50 x 1]列向量:
array([[ 2.50000000e+01],
[ 2.30008330e+01],
...
[ 2.10849646e+01],
[ 2.30008330e+01],
[ 2.50000000e+01]])
while np.sum(b**2, 1)
:
array([ 2.50000000e+01, 2.30008330e+01, 2.10849646e+01,
1.92523948e+01, 1.75031237e+01, 1.58371512e+01,
...
1.27551020e+01, 1.42544773e+01, 1.58371512e+01,
1.75031237e+01, 1.92523948e+01, 2.10849646e+01,
2.30008330e+01, 2.50000000e+01])
看起来像是同一个向量的转置。所以我们有一个[50 x 1] * [1 x 50] = [50 x 50]形式的操作。
此操作的通用名称是什么?我怎样才能在R中重现它?
答案 0 :(得分:1)
您正在寻找?outer
我相信。根据帮助文件,它返回:
数组X和Y的外积...具有维度的数组A. c(dim(X),dim(Y))
因此,对于您的具体示例,请尝试:
outer(a^2,b^2,FUN=`+`)
# [,1] [,2] [,3]
#[1,] 50.00000 48.00083 46.08496 ...to col 50
#[2,] 48.00083 46.00167 44.08580 ...to col 50
#[3,] 46.08496 44.08580 42.16993 ...to col 50
# ...to row 50