可以说,我有一个以下 R 数组
a <- array(1:18, dim = c(3, 3, 2))
r$> a
, , 1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
, , 2
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
Run Code Online (Sandbox Code Playgroud)
现在我想在 Python numpy 中拥有相同的数组。我用
a = np.arange(1, 19).reshape((3, 3, 2))
array([[[ 1, 2],
[ 3, 4],
[ 5, 6]],
[[ 7, 8],
[ 9, 10],
[11, 12]],
[[13, 14],
[15, 16],
[17, 18]]])
Run Code Online (Sandbox Code Playgroud)
但不知何故,这两个人看起来并不相同。如何在 Python 中复制同一个数组?
我也尝试过
a = np.arange(1, 19).reshape((2, 3, 3))
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[10, 11, 12],
[13, 14, 15],
[16, 17, 18]]])
Run Code Online (Sandbox Code Playgroud)
这也不相同。
基本上区别在于数组的顺序。
数组可以是行优先或列优先。请参阅此处了解一些信息。
R 默认构建列优先数组,Python 构建行优先数组。这就是为什么您使用的默认构造函数不会给出相同的输出。要解决这个问题,您可以告诉 Python 以列优先构造数组,方法是指定 Fortran 连续(列优先):
np.reshape(np.arange(1,19), (3,3,2), "F")
array([[[ 1, 10],
[ 4, 13],
[ 7, 16]],
[[ 2, 11],
[ 5, 14],
[ 8, 17]],
[[ 3, 12],
[ 6, 15],
[ 9, 18]]])
Run Code Online (Sandbox Code Playgroud)
它看起来不同,但底层数据与 R 中的相同。
如果您进行索引,您会发现它的执行完全相同:
回复:
a[1,1,]
[1] 1 10
Run Code Online (Sandbox Code Playgroud)
Python:
a[1,1,]
[1] 1 10
Run Code Online (Sandbox Code Playgroud)
将其与以前评价最高的答案进行比较,后者不会给您相同的值。它可能在视觉上看起来相同,但功能并不相同。
a[0,0,]
>>> array([ 1, 10])
Run Code Online (Sandbox Code Playgroud)
另请参阅网状团队关于差异的精彩小插图:https://cran.r-project.org/web/packages/reticulate/vignettes/arrays.html
| 归档时间: |
|
| 查看次数: |
562 次 |
| 最近记录: |