adding a condition to blkproc()

I use the following code to find the mean value of non-zero values of each block of an array. I wonder how I can add a condition to have a mean value if the number of non-zero values are bigger than 75% of the size of the block. I apperciate your help.
mean_wout_zeros = blkproc(Myarray,[block block],@(x)sum(x(:))./(sum(logical(x(:)))));

답변 (1개)

Sean de Wolski
Sean de Wolski 2011년 7월 8일

1 개 추천

Just use this as your function
function out = meanZ75(in)
%mean sans zeros if there are 25% or more zeros
%pure mean if there are < 25% zeros
%SCd 07/11/2011
%
in = in(:);
if nnz(in) >= 0.25*length(in);
out = mean(in(~~in));
else
out = mean(in);
end

댓글 수: 4

Hassan
Hassan 2011년 7월 9일
Hi Sean, thanks for the comment. I dont know how to do that. could you please tell me in an example?
Ashish Uthama
Ashish Uthama 2011년 7월 11일
Hassan, use meanZ75 as the input function handle: meanOut = blkproc(Myarray, [b b], @meanZ75);
Hassan
Hassan 2011년 7월 15일
Thanks Sean for the code but I dont know how to use it. Should it be like as follows? what is 'in'?
mean_wout_zeros = blkproc(new_array2(:,:,i),[win_m win_m],@(x)sum(x(:))./(sum(logical(x(:)))));
function out = meanZ75(in)
%mean sans zeros if there are 25% or more zeros
%pure mean if there are < 25% zeros
%SCd 07/11/2011
%
in = in(:);
if nnz(in) >= 0.25*length(in);
out = mean(in(~~in));
else
out = mean(in);
end
Sean de Wolski
Sean de Wolski 2011년 7월 15일
save
function out = meanZ75 etc.
to 'meanZ75.m' in your MATLAB folder in your documents. Then use it as the function for blkproc
blkoproc(new_array2(:,:,iu),[10 10],'meanZ75');

댓글을 달려면 로그인하십시오.

질문:

2011년 7월 8일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by