我有这个 ixjxk 3d 矩阵(这是一部电影)。如果没有循环,我试图取每个 ixj 数组中非零正元素的平均值,并将这些值放入 1x1xk 矩阵中。
我一直在寻找很长一段时间,尽管有很多解决方案可以为 2d 矩阵完成此任务,但我一生都无法找到一种方法来为 3d 矩阵执行此操作而不使用循环。
我有这个 ixjxk 3d 矩阵(这是一部电影)。如果没有循环,我试图取每个 ixj 数组中非零正元素的平均值,并将这些值放入 1x1xk 矩阵中。
我一直在寻找很长一段时间,尽管有很多解决方案可以为 2d 矩阵完成此任务,但我一生都无法找到一种方法来为 3d 矩阵执行此操作而不使用循环。
如果你不想要循环,那么如何将每帧的总和除以非零元素的数量:
sum(sum(A))./sum(sum(A ~= 0))
为了摆脱负数,首先运行A(A < 0) = 0
tashuhka 指出
如果将每个图像(帧)转换为数组会怎样:
% 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))).';