0

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

我一直在寻找很长一段时间,尽管有很多解决方案可以为 2d 矩阵完成此任务,但我一生都无法找到一种方法来为 3d 矩阵执行此操作而不使用循环。

4

2 回答 2

2

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

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

为了摆脱负数,首先运行A(A < 0) = 0tashuhka 指出

于 2013-08-01T09:25:39.577 回答
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))).';
于 2013-08-01T09:15:05.560 回答