我有一个大小为28x28x5000的数组。我需要将其转换为28x28x3x5000。第三个维度代表渠道。每个频道都是相同的副本。
如何在不使用循环的情况下在Matlab中执行此操作?
答案 0 :(得分:3)
repmat(permute(A,[1,2,4,3]),[1,1,3,1])
答案 1 :(得分:3)
首先permute
获取第4个维度,然后使用repmat
进行复制:
%// input data
a = magic(28);
in = repmat(a,[1,1,100]);
%// permute
out = permute(in,[1,2,4,3]);
%// copy
out(:,:,[2 3],:) = repmat( out(:,:,1,:), [1, 1, 2]);
答案 2 :(得分:3)
另一个单行是ItemTotal / NullIf(sum(ItemTotal) over ( partition by ItemCode,ItemNo) , 0 )