将多个频道添加到28x28x5000矩阵

时间:2016-09-21 07:13:06

标签: arrays matlab matrix multidimensional-array

我有一个大小为28x28x5000的数组。我需要将其转换为28x28x3x5000。第三个维度代表渠道。每个频道都是相同的副本。

如何在不使用循环的情况下在Matlab中执行此操作?

3 个答案:

答案 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 )