Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy阵列-将三维阵列转换为二维阵列_Python_Arrays_Numpy - Fatal编程技术网

Python Numpy阵列-将三维阵列转换为二维阵列

Python Numpy阵列-将三维阵列转换为二维阵列,python,arrays,numpy,Python,Arrays,Numpy,具有以下3D阵列(9,9,9): np.arange(729).重塑((9,9,9)) 如何将其重塑为二维阵列(27,27): 可以首先将阵列重塑为4d阵列,交换第二轴和第三轴,然后将其重塑为27 X 27: a.reshape(3,3,9,9).transpose((0,2,1,3)).reshape(27,27) #array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 81, 82, 83, 84, # 85,

具有以下3D阵列(9,9,9):

np.arange(729).重塑((9,9,9))

如何将其重塑为二维阵列(27,27):


可以首先将阵列重塑为4d阵列,交换第二轴和第三轴,然后将其重塑为27 X 27:

a.reshape(3,3,9,9).transpose((0,2,1,3)).reshape(27,27)

#array([[  0,   1,   2,   3,   4,   5,   6,   7,   8,  81,  82,  83,  84,
#         85,  86,  87,  88,  89, 162, 163, 164, 165, 166, 167, 168, 169,
#        170],
#       [  9,  10,  11,  12,  13,  14,  15,  16,  17,  90,  91,  92,  93,
#         94,  95,  96,  97,  98, 171, 172, 173, 174, 175, 176, 177, 178,
#        179],
#  ... 
#       [558, 559, 560, 561, 562, 563, 564, 565, 566, 639, 640, 641, 642,
#        643, 644, 645, 646, 647, 720, 721, 722, 723, 724, 725, 726, 727,
#        728]])

如果您同意在列表中移动数据,则可以使用:

np.hstack([x for x in np.arange(729).reshape((9,9,9))])
解释

我曾经为每个轴排列步幅和形状信息

>>> x.strides
(324L, 36L, 4L)
>>> x.transpose(1, 0, 2).strides
(36L, 324L, 4L)
更多信息在此

然后我按照预期在2D中使用3D
(9L,9L,9L)

>>> x.reshape(27, 27)
(27L, 27L)
当然,函数的组合(如
转置
重塑
)在
numpy
中非常常见。它允许您在一行中执行此矩阵变换:

x.transpose(1, 0, 2).reshape(27, 27)
编辑

正如@PaulPanzer所指出的,该阵列未排序

要实现这一点,可以使用:

y[y[:,2].argsort()]

但是,也许这不再是最简单的答案。

从您给出的示例来看,您所做的似乎不仅仅是重塑——还包括变换阵列。例如,第一行从8跳到81。您试图实现的转换规则是什么?很好。回答得很清楚。@jamesclean很可能是,但也可能是错的。看看结果的第二排。@PaulPanzer该死的你是对的,我错了^^没有注意到我们中最好的;-)@保尔坦克,纠正它!然而,我不确定这是否是最好的答案了。。。Thx指出这一点,尽管这也给出了错误的结果,但不要介意形状错误,展平输出中的元素#27不符合规定。事实上,它和另一个答案一样是错误的。谢谢你,你的解决方案非常有效,但是我在我的问题上犯了一个错误并对其进行了编辑。你能提出一个新问题而不是编辑当前问题吗?这会使答案无效?如果你给我链接的话,我可以帮你。很抱歉,谢谢
>>> x.reshape(27, 27)
(27L, 27L)
x.transpose(1, 0, 2).reshape(27, 27)
y[y[:,2].argsort()]