删除长度为1的Julia数组维度

tln*_*agy 4 arrays julia

假如我有一个尺寸为1024x1024x1x1x100的5D阵列.如何制作1024x1024x100的新阵列?

如果您知道要提前保留哪些尺寸,则以下情况有效:

arr = arr[:, :, 1, 1, :]
Run Code Online (Sandbox Code Playgroud)

我不知道哪个尺寸提前是什么尺寸,我想只保留给定布尔掩模的尺寸; 像这样的东西......

arr2 = arr[(size(arr) .> 1)]
Run Code Online (Sandbox Code Playgroud)

Dan*_*etz 6

squeeze功能专门用于删除长度为1的尺寸.从手册:

Base.squeeze - 功能.

squeeze(A, dims)

从阵列A中删除dims指定的尺寸.dims的元素必须是唯一的并且在范围内1:ndims(A).size(A,i)必须为所有等于1 idims.

为了"挤压"尺寸1的所有尺寸(当它们事先未知时),我们需要找到它们并将它们变成元组.这是通过((size(arr).==1)...).结果是:

squeeze(a,(find(size(a).==1)...))
Run Code Online (Sandbox Code Playgroud)