arrayfun doesn't work with rmoutliers
조회 수: 3 (최근 30일)
이전 댓글 표시
Goal
Remove outliers along dimension d of a 3D matrix using arrayfun and rmoutliers (or superior alternatives).
Minimal Working Example
Take the following matrix:
A = [0 2 0 0 0; 0 0 0 4 0; 3 0 0 3 0];
A(:,:,2) = A
Since each 1D array along dimension d will have a different number of outliers, the output of arrayfun will have to be a cell array (by specifying "UniformOutput" = false). Calling rmoutliers through arrayfun returns the original matrix with the outliers (undesired behaviour):
arrayfun(@rmoutliers,A,"UniformOutput",false)
The function works as expected when called on each row by itself:
rmoutliers(A(1,:,1)) % removes the 2
rmoutliers(A(3,:,1)) % removes both 3's
Hopefully I'm missing something trivial.
댓글 수: 0
채택된 답변
Voss
2022년 1월 5일
A = [0 2 0 0 0; 0 0 0 4 0; 3 0 0 3 0];
A(:,:,2) = A
C = num2cell(A,2)
cellfun(@rmoutliers,C,"UniformOutput",false)
추가 답변 (1개)
Mike Croucher
2022년 1월 5일
arrayfun operates on every element of the array. So
arrayfun(@rmoutliers,A,"UniformOutput",false)
is like doing
rmoutliers(0)
rmoutliers(0)
rmoutliers(3)
etc
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!