如何在Python的NumPy中复现R语言中的三维数组结构?
在NumPy中复现R语言的三维数组结构
R与NumPy的数组填充逻辑存在核心差异:
- R默认采用**列优先(Fortran顺序)**填充,维度顺序为
(行, 列, 层),填充时先填满每一列,再推进到下一列,最后切换层 - NumPy默认采用**行优先(C顺序)**填充,填充时先填满每一行,再推进到下一行,维度处理逻辑和R不同
要复现R中维度为(3, 3, 2)的目标数组,以下两种方法都可行:
方法1:用reshape指定Fortran顺序
直接在重塑数组时指定order='F',让NumPy按照R的填充逻辑生成数组:
import numpy as np a = np.arange(1, 19).reshape((3, 3, 2), order='F') print(a)
输出结果:
array([[[ 1, 10], [ 4, 13], [ 7, 16]], [[ 2, 11], [ 5, 14], [ 8, 17]], [[ 3, 12], [ 6, 15], [ 9, 18]]])
该结果与R的数组结构完全对应:
- NumPy中的
a[:, :, 0]对应R输出的, , 1层 - NumPy中的
a[:, :, 1]对应R输出的, , 2层
方法2:通过轴转置调整结构
如果已经用默认顺序生成了数组,可以通过转置轴的顺序来匹配R的结构:
import numpy as np # 先按默认顺序生成(2, 3, 3)数组,再调整轴顺序为(行, 列, 层) a = np.arange(1, 19).reshape((2, 3, 3)).transpose(1, 2, 0) print(a)
输出结果与方法1完全一致。
结构匹配验证
对比R的, , 1层输出:
[,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9
对应NumPy的a[:, :, 0]:
array([[1, 4, 7], [2, 5, 8], [3, 6, 9]])
二者结构完全一致。
内容的提问来源于stack exchange,提问作者Avto Abashishvili
相关产品推荐
相关产品推荐

