假设我有一个大小为 1024x1024x1x1x100 的 5D 数组。如何制作一个 1024x1024x100 的新数组?
如果您提前知道要保留哪些维度,则以下操作有效:
arr = arr[:, :, 1, 1, :]
But 我提前不知道哪些尺寸是多少我只想保留给定布尔掩码的尺寸;像这样的东西...
arr2 = arr[(size(arr) .> 1)]
The squeeze
函数是专门为了删除长度 1 的尺寸而定义的。手册中:
Base.squeeze — 函数。
squeeze(A, dims)
删除尺寸
由数组 A 中的 dims 指定。dims 的元素必须是唯一的并且
范围内1:ndims(A)
. size(A,i)
必须全部等于 1i
in dims
.
为了“压缩”所有大小为 1 的维度(当它们事先未知时),我们需要找到它们并将它们放入元组中。这是通过以下方式完成的((size(arr).==1)...)
。所以结果是:
squeeze(a,(find(size(a).==1)...))
感谢奥利维尔的评论,这里是:
UPDATE: dropdims
现在(撰写本文时为 Julia 1.9)是挤出 1 维的首选方法。例如,要从 M 中删除所有大小为 1 的维度:
dropdims(M,dims=tuple(findall(size(M).==1)...))
如果尺寸已知,那么最好明确指定它们,而不是使用上面的尺寸findall
method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)