Среднее значение ненулевых элементов в трехмерном массиве

У меня есть эта i x j x k 3d матрица (это фильм). Без циклов я пытаюсь взять среднее значение ненулевых положительных элементов в каждом массиве ixj и поместить эти значения в матрицу 1x1xk.

Я долго искал, и хотя есть множество решений для этого для 2-мерной матрицы, я не могу найти способ сделать это для 3-мерной матрицы без использования цикла.

2 ответа

Решение

Что если вы преобразуете каждое изображение (кадр) в массив:

% 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))).';

Если вы не хотите циклов, то как насчет простого деления суммы каждого кадра на количество ненулевых элементов:

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

Чтобы избавиться от отрицательных чисел, сначала запустите A(A < 0) = 0 как указал ташухка

Другие вопросы по тегам