【问题标题】:R equivlent of python numpy slice: [:, None, :]R相当于python numpy slice:[:, None, :]
【发布时间】:2016-03-09 15:23:09
【问题描述】:

给定一个 2x2 矩阵 a,将其转换为 2x1 数组 b,其中每一列都是来自 a 的行向量。这在python中真的很容易做到。在 R 中是否有一种优雅而简洁的方式来做到这一点?

> a = np.array([[1, 2], [3, 4]])

array([[1, 2],
       [3, 4]])

> b = a[:, None, :]

array([[[1, 2]],
       [[3, 4]]]) 

在 R 中我想要这个输入:

a = matrix(1:4, ncol=2, byrow = T)

     [,1] [,2]
[1,]    1    2
[2,]    3    4

要修改以匹配此输出:

b = array(1:4, dim=c(2,1,2))

, , 1

     [,1]
[1,]    1
[2,]    2

, , 2

     [,1]
[1,]    3
[2,]    4

【问题讨论】:

  • 在下面查看我的答案。

标签: python r numpy matrix multidimensional-array


【解决方案1】:

看起来您实际上可能正在尝试获取 2x1x2 数组?因此,在 R 中,您可以将矩阵转换为数组(这些是单独的类),指定新数组的预期尺寸。

a <- matrix(c(1,2,3,4), 2, byrow=TRUE)
b <- array(t(a), dim=c(2,1,2))
b

【讨论】:

  • 矩阵是一个二维数组,而不是一个单独的类。请注意,class(array(1:4, c(2, 2)))"matrix"identical(matrix(1:4, 2), array(1:4, c(2,2))) 是 TRUE。
  • 嗯,我以前从未注意到这一点。我想我一直认为它们是不同的类,因为在输入数组时需要矩阵错误的函数,反之亦然。
  • @doicomehereoften1,在 python 中,我可以减去两个数组 (b - a),但似乎我无法在 R 中如此轻松地做到这一点。在python中b-a = array([[[ 0, 0], [-2, -2]], [[ 2, 2], [ 0, 0]]])
  • 您可能会考虑使用sweep()。从大学开始我就不需要做很多矩阵/数组操作了,所以我敢打赌你可能是为了家庭作业做这些......
  • @doicomehereoften1,我正在处理机器学习上下文,我知道 python 和 octave,但发现 R 对线性代数概念并不直观。我会调查一下。
猜你喜欢
  • 2011-05-05
  • 2020-11-19
  • 2011-06-25
  • 2021-04-01
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多