Julia 展平内部尺寸

Julia 展平内部尺寸,julia,Julia,我有大小(209,64,64,3)的矩阵(图像数据)。由于这是图像数据,为了将矩阵输入到神经网络中。我需要将内部3维(2,3,4)展平为单个(64 x 64 x 3=12288)列向量。因此,最终的矩阵将是维度(12288209) 我怎么能做到呢, # I am able to flatten the entire matrix using `Iterators.flatten()` function but no clue how to flatten just the inner 3 dim

我有大小
(209,64,64,3)
的矩阵(图像数据)。由于这是图像数据,为了将矩阵输入到神经网络中。我需要将内部3维(2,3,4)展平为单个(64 x 64 x 3=12288)列向量。因此,最终的矩阵将是维度
(12288209)

我怎么能做到呢,

# I am able to flatten the entire matrix using `Iterators.flatten()` function but no clue how to flatten just the inner 3 dimensions.

a = rand(209,64,64,3)
a_flat = Iterators.flatten(a) |> collect

size(a_flat)
#Out > (2568192,)
还有人知道像素中的颜色通道是否必须是,所有图像像素的颜色通道首先是红色,然后是蓝色和绿色(格式为
[r;r;r;r;r…b;b;b;…g;g;g]


或者它可能是第一个像素的形式r,g,b,然后是下一个像素的形式r,g,b等等(形式为
[r;b;g;r;…g;r;b;g]
)。在这里,我使用分号(;)只是为了说明它是一个列向量而不是行向量,我已经想出了下面的一段代码,但肯定有更好的方法来做到这一点

a = rand(209,64,64,3)
m = Array{Float64}(undef, (size(a)[2]*size(a)[3]*size(a)[4],size(a)[1]))

for i = 1:size(a)[1]
    m[:, i] = Iterators.flatten(a[i,:,:,:]) |> collect 
end 

size(m)
# Out > (12288, 209)

你的问题描述有点混乱。你的意思是你想要一个(20912288)矩阵,还是你也想切换这些维度?还不清楚“单列向量”是什么意思,因为您将以矩阵结束。要重塑阵列,请查看
重塑
功能。要正确处理rgb,请查看Images.jl,其中图像是rgb颜色类型的矩阵。顺便说一句,我认为您的意思是“展平外部尺寸”。第一个维度是最里面的,数据按顺序存储在内存中,然后移到其他维度。您好,您的更正是外部维度(抱歉,我的印象是内部意味着更深入)。是的,列向量可能是一种不正确的词语用法。我所追求的是取消行维度2,3,4,这将导致矩阵(12288,1)。并对所有其他图像执行相同操作,从而生成(12288209)矩阵。我已经在下面的答案中说明了这一点。但是想知道是否有更好的解决方案。你必须重塑整个阵列,外部维度不是你可以重塑为矩阵的“东西”。但是,如果对整个阵列进行整形,则会得到:
b=reformate(a,size(a,1),:)
,这是一个209x12288阵列。然后用
m=permutedims(b)
切换尺寸。不,您有一个12288x209矩阵。如果您对正确处理RGB图像感兴趣,我建议您查看一下图像生态系统:看起来您需要
重塑
,然后是
置换IMS