关于 Julia 中的 ndarray 创建:在额外维度中堆叠

2024-03-17

我想将以下 python 代码转换为 julia:

import numpy as np
x = np.random.random([4,5,6])
y = np.array([[x,  x,  x  ],
              [2*x,3*x,4*x]])
print(y.shape)
-> (2, 3, 4, 5, 6)

在朱莉娅看来,类似的语法是

x = rand(4,5,6) 
y = [x x x; 2x 3x 4x]
println(size(y))
-> (8, 15, 6)

这些结果是不同的。你能告诉我该怎么做吗?


使用随机数和乘数会掩盖您所寻求的细节。让我们进行连续编号并尝试让 Python 和 Julia 显示相似:

python>>>>>> z = np.reshape(np.array(range(1,121)), [4, 5, 6])
>>> z
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],
        [ 25,  26,  27,  28,  29,  30]],

       [[ 31,  32,  33,  34,  35,  36],
        [ 37,  38,  39,  40,  41,  42],
        [ 49,  50,  51,  52,  53,  54],
        [ 55,  56,  57,  58,  59,  60]],

       [[ 61,  62,  63,  64,  65,  66],
        [ 67,  68,  69,  70,  71,  72],
        [ 73,  74,  75,  76,  77,  78],
        [ 79,  80,  81,  82,  83,  84],
        [ 85,  86,  87,  88,  89,  90]],

       [[ 91,  92,  93,  94,  95,  96],
        [ 97,  98,  99, 100, 101, 102],
        [103, 104, 105, 106, 107, 108],
        [109, 110, 111, 112, 113, 114],
        [115, 116, 117, 118, 119, 120]]])

julia>z = reshape(1:120, 6, 5, 4)
6×5×4 reshape(::UnitRange{Int64}, 6, 5, 4) with eltype Int64:
[:, :, 1] =
 1   7  13  19  25
 2   8  14  20  26
 3   9  15  21  27
 4  10  16  22  28
 5  11  17  23  29
 6  12  18  24  30

[:, :, 2] =
 31  37  43  49  55
 32  38  44  50  56
 33  39  45  51  57
 34  40  46  52  58
 35  41  47  53  59
 36  42  48  54  60

[:, :, 3] =
 61  67  73  79  85
 62  68  74  80  86
 63  69  75  81  87
 64  70  76  82  88
 65  71  77  83  89
 66  72  78  84  90

[:, :, 4] =
 91   97  103  109  115
 92   98  104  110  116
 93   99  105  111  117
 94  100  106  112  118
 95  101  107  113  119
 96  102  108  114  120

因此,如果您希望在屏幕上以类似的方式打印内容,则需要在 Julia 和 Python 之间交换数组上的第一个和最后一个维度大小(反转维度顺序)。此外,由于当您将数组放在相同的括号中时,Julia 会连接数组,而 Python 只是将其数组嵌套得更深,因此您需要在 Python 上使用 np.reshape 或在 Julia 上使用 reshape 将数组更改为您想要的形状。我建议您检查一组连续整数的结果数组,以确保它们在返回随机浮点数之前打印相似。请记住,访问元素时索引顺序也不同。考虑

>>> zzz = np.array([[z,z,z], [z,z,z]]) # python

> zzz = reshape([z z z; z z z], 6, 5, 4, 3, 2) # julia
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 Julia 中的 ndarray 创建:在额外维度中堆叠 的相关文章