【问题标题】:Reshaping a Julia-stored array in Python在 Python 中重塑 Julia 存储的数组
【发布时间】:2018-11-06 18:01:11
【问题描述】:

我一直在为这个问题苦苦挣扎,所以我决定向你寻求帮助。所以,简而言之,我的问题是以下...

我所有的代码都在 Julia 中,并且它们处理的数据已经像 Julia 一样存储(我猜是列主要的),但是现在我需要在 python 中运行一些代码来读取其中的一些数据和重塑它。但是,由于两种 lenguajes 中数据的存储和读取方式不同,因此重塑的行为并不像我预期的那样(不是错的,只是不是我想要的) 举个例子... 在 Julia 中,当我将一维数组重塑为 (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 示例中相同的结果?..

【问题讨论】:

    标签: python julia


    【解决方案1】:

    你可以写:

    >>> 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 会反转此处所需的尺寸。

    【讨论】:

    • 首先感谢您的回答。现在,我看不到您的结果与我发布的结果有何相似之处(给定相同的数组 b)。你使用 Python 得到的结果“r”与我使用 Julia 得到的结果不一样……我错了吗?
    • 结果是一样的。它只是在 Julia 和 Python 中以不同的方式显示。对于每个 i,j,k,值 r[i,j,k] 在 Julia 和 Python 中都是相同的。
    • 就像@crstnbr 指出的那样——只是显示上的差异以及在 Python 数组中是 0 索引和 Julia 中是 1 索引的事实,因此您必须将所有索引移动 1。
    • @BogumiłKamiński 感谢您的回答。我现在看到这确实是相同的结果。但是,您愿意解释一下“np.transpose”函数中传递的第二个参数的含义吗?我想这与轴排列有关,但我不清楚它实际上是如何工作的......
    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多