比如说,我有一个下面的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
现在我想在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]]])
但不知何故,这两个看起来不一样。如何在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]]])
这也是不相同的。
3条答案
按热度按时间m3eecexj1#
基本上区别在于数组的顺序。
数组可以是行优先或列优先。here的一些信息。
R默认构造列优先数组,Python构造行优先数组。这就是为什么您使用的默认构造函数不会给出给予相同的输出。为了解决这个问题,你可以告诉Python在column-major中构造数组,说它应该在Fortran中连续(column-major):
它看起来不同,但底层数据与R中相同。
如果你做索引,你可以看到它的执行完全相同:
R:
Python:
与以前最高评级的答案相比,它不会给你给予相同的价值。它在视觉上看起来是一样的,但它的功能却不一样。
另请参阅网状团队关于差异的精彩小插曲:https://cran.r-project.org/web/packages/reticulate/vignettes/arrays.html
bogh5gae2#
NumPy中元素的顺序必须与column-major的顺序匹配,才能重现与R中相同的数组。
这可以通过首先重新成形,然后调换轴来实现。
我是这样做的:
这将给予一个NumPy中的数组,该数组与R数组的顺序相匹配:
svgewumm3#
除了
np.arrange
之外,您还可以使用更灵活的np.linspace
,即