Julia:如何在保留顺序的同时重塑数组?

U26*_*647 5 arrays reshape julia

Python 中有一个类似的问题,但我问的是 Julia 版本。

我有一个 shape 的多维数组img = (3, 64, 64),它表示第一维为 RGB 的图像。我想用来plt.imshow(img)在 Jupyter Notebook 中显示图像,但plt.imshow采用形状为 的数组(64, 64, 3)。所以,

是否有任何内置函数可以img 在不改变像素顺序的情况下进行转换?

注意:reshape(img, (64, 64, 3))不起作用。我已经尝试过了,但没有得到原始图像。

我写了一个嵌套for循环来说明我想要的:

# Suppose img has been created
img_reshaped = zeros(size(img)[2], size(img)[3], size(img)[1])
for i in 1: size(img)[2]
    for j in 1: size(img)[3]
        for k in 1: size(img)[1]
            img_reshaped[i,j,k] = img[k,j,i]
        end
    end
end
plt.imshow(test_img)
Run Code Online (Sandbox Code Playgroud)

上面的循环for给出

在此输入图像描述

同时reshape(img, (64, 64, 3))给出

在此输入图像描述

这是不希望的。

phy*_*att 1

扩展 @mcabbott 的评论

\n

简短回答:

\n
img_for_plot = permutedims(img, [2, 3, 1])\n
Run Code Online (Sandbox Code Playgroud)\n

这是帮助页面的顶部permutedims

\n
help?> permutedims\nsearch: permutedims permutedims! PermutedDimsArray\n\n  permutedims(A::AbstractArray, perm)\n\n  Permute the dimensions of array A. perm is a vector specifying a permutation of length ndims(A).\n
Run Code Online (Sandbox Code Playgroud)\n

在你的情况下,它看起来像这样:

\n
julia> img = rand(1:256, 3, 6, 6)\n3\xc3\x976\xc3\x976 Array{Int64,3}:\n[:, :, 1] =\n  42  193   60  250  215  145\n  99  193  126   36  206  123\n 210   28  190  234  186  139\n\n[:, :, 2] =\n  29  174  254  233  215  245\n 247   64  254  133  124  254\n 145  206   26   18  231  105\n\n[:, :, 3] =\n 198  120  191  181   43  209\n  74  247  225  240   30  126\n 231  163  104   24  237   18\n\n[:, :, 4] =\n 171   44   45  153   28   60\n 145  180  220   82   47  132\n 140   96   32  147  162   26\n\n[:, :, 5] =\n 246  180  221  136  158  111\n 100  186   39  155  184  152\n 112  237   11   60  222  171\n\n[:, :, 6] =\n 209  122  191   90  106   89\n  17   91  163  117  168  215\n 105  163  204  154  214  119\n\njulia> size(img)\n(3, 6, 6)\n\njulia> img_for_plot = permutedims(img, [2, 3, 1])\n6\xc3\x976\xc3\x973 Array{Int64,3}:\n[:, :, 1] =\n  42   29  198  171  246  209\n 193  174  120   44  180  122\n  60  254  191   45  221  191\n 250  233  181  153  136   90\n 215  215   43   28  158  106\n 145  245  209   60  111   89\n\n[:, :, 2] =\n  99  247   74  145  100   17\n 193   64  247  180  186   91\n 126  254  225  220   39  163\n  36  133  240   82  155  117\n 206  124   30   47  184  168\n 123  254  126  132  152  215\n\n[:, :, 3] =\n 210  145  231  140  112  105\n  28  206  163   96  237  163\n 190   26  104   32   11  204\n 234   18   24  147   60  154\n 186  231  237  162  222  214\n 139  105   18   26  171  119\n\njulia> size(img_for_plot)\n(6, 6, 3)\n
Run Code Online (Sandbox Code Playgroud)\n