R中以下矩阵运算的名称和功能

时间:2016-09-01 23:48:24

标签: python r matrix

我试图用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中重现它?

1 个答案:

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