3d数组中非零元素的平均值

时间:2013-08-01 08:54:50

标签: matlab vectorization mean

我有这个i x j x k 3d矩阵(这是一部电影)。没有循环,我试图取每个ixj数组中非零正元素的均值,并将这些值放入1x1xk矩阵中。

我现在已经搜索了很长一段时间了,虽然有很多解决方案来实现这个2d矩阵,但我不能为我的生活找到一种方法来为3d矩阵做到这一点而不使用循环。

2 个答案:

答案 0 :(得分:2)

如果你不想要循环,那么如何将每个帧的总和除以非零元素的数量:

sum(sum(A))./sum(sum(A ~= 0))

要摆脱负数,首先按照tashuhka的指示运行A(A < 0) = 0

答案 1 :(得分:1)

如果将每个图像(帧)转换为数组,该怎么办:

% Remove negative and zero elements
A(A<=0) = 0;
% Convert each image into array
B = reshape(A,[Nimg,Nfrm]);
% Extract mean value of each image
C = mean(B,1);

其中Nimg是每张图片中的像素数,Nfrm是图片数量。

如果您不想在平均分母中包含非零和负数(如@Dan建议的那样),只需使用以下行缩放结果:

C_Dan = C.*squeeze(Nimg./sum(sum(A>0))).';