首页 > 解决方案 > 在 Python 中重塑 Julia 存储的数组

问题描述

一段时间以来我一直在努力解决这个问题,所以我决定向你寻求帮助。所以,简而言之,我的问题是以下......

我所有的代码都在 Julia 中,并且它们处理的数据已经像 Julia 一样存储(我猜是列优先级),但是现在我需要在 python 中运行一些代码来读取其中的一些数据并对其进行重构。但是,由于数据在两种 lenguajes 中的存储和读取方式不同,因此重塑的行为并不像我预期的那样(并不是说它是错误的,只是不是我想要的)作为一个例子......在 Julia 中,当我重塑一个 1D-将数组转换为(2,3,4)数组维度,我得到:

julia> a=collect(1:24);
julia> r=reshape(a,2,3,4)
2×3×4 Array{Int64,3}:
[:, :, 1] =
1  3  5
2  4  6

[:, :, 2] =
7   9  11
8  10  12

[:, :, 3] =
13  15  17
14  16  18

[:, :, 4] =
19  21  23
20  22  24

在python中我得到,

b=np.arange(1,25);
r=b.reshape(4,2,3)

In [200]: r
array([[[ 1,  2,  3],
    [ 4,  5,  6]],

   [[ 7,  8,  9],
    [10, 11, 12]],

   [[13, 14, 15],
    [16, 17, 18]],

   [[19, 20, 21],
    [22, 23, 24]]])

有什么方法可以在 Python 中实现与 Julia 示例中相同的结果?..

标签: pythonjulia

解决方案


你可以写:

>>> np.transpose(b.reshape(4,3,2), (2,1,0))
array([[[ 1,  7, 13, 19],
        [ 3,  9, 15, 21],
        [ 5, 11, 17, 23]],

       [[ 2,  8, 14, 20],
        [ 4, 10, 16, 22],
        [ 6, 12, 18, 24]]])

编辑:

https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.transpose.html中所述,第二个参数np.transpose根据作为第二个参数给出的值排列数组的轴。实际上,在这种情况下,您可以编写np.transpose(b.reshape(4,3,2))为默认情况下np.transpose反转此处所需的尺寸。


推荐阅读