我有这个i x j x k 3d矩阵(这是一部电影)。没有循环,我试图取每个ixj数组中非零正元素的均值,并将这些值放入1x1xk矩阵中。
我现在已经搜索了很长一段时间了,虽然有很多解决方案来实现这个2d矩阵,但我不能为我的生活找到一种方法来为3d矩阵做到这一点而不使用循环。
答案 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))).';