Среднее значение ненулевых элементов в трехмерном массиве
У меня есть эта 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
как указал ташухка