필터 지우기
필터 지우기

How do I put my values in certain bins and retrieve the values from the highest count bin

조회 수: 7 (최근 30일)
I have been trying to do this for a while and failed, am hopping to get some guidance. So I have a 3D variable called Zo, its 3601 by 7201 by 100, and all the values in it range from 0 to 1. What I would like to do is sort my values while ignoring values of Zo that are exactly zero. For example, if I am investigating Zo(1,1,:), I would like to sort the 100 values in Zo(1,1,:) that are not zeros into 10 bins that each has 0.1 width. And after, I would like to retain the values of Zo(1,1,:) that fall under the bin with the highest count. The final result should be a new variable called N that has the non-zero values of the bin with the highest count, and another variable called M that has the correspodning index of the values picked out from Zo(1,1,:). I hope I explained it well and I appreciate any guidance.
  댓글 수: 3
Bruno Luong
Bruno Luong 2022년 7월 29일
But again in your description
"I would like to sort the 100 values in Zo(1,1,:) that are not zeros into 10 bins"
Still your decription still mix both, sort is rearange the data, binning means find where is the bin the data falls into. Please be precise.
a = rand(1,20)
a = 1×20
0.2156 0.7017 0.9893 0.2969 0.5716 0.4926 0.1556 0.7251 0.1279 0.5596 0.2909 0.0361 0.7691 0.8392 0.7579 0.2132 0.4142 0.5608 0.5313 0.0022
sort(a)
ans = 1×20
0.0022 0.0361 0.1279 0.1556 0.2132 0.2156 0.2909 0.2969 0.4142 0.4926 0.5313 0.5596 0.5608 0.5716 0.7017 0.7251 0.7579 0.7691 0.8392 0.9893
binloc = discretize(a, 0:0.1:1)
binloc = 1×20
3 8 10 3 6 5 2 8 2 6 3 1 8 9 8 3 5 6 6 1

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

채택된 답변

Bruno Luong
Bruno Luong 2022년 7월 29일
편집: Bruno Luong 2022년 7월 29일
Adapt this to your need
% Example data
A=rand(2,3,20);
A(randi(numel(A),1,10))=0;
[m,n,p] = size(A);
edges = 0:0.1:1;
A(A==0)=NaN;
B = discretize(A,edges);
[I,J] = ndgrid(1:m,1:n);
I = repmat(I,1,1,p);
J = repmat(J,1,1,p);
IJK = [I(:) J(:) B(:)];
IJK = IJK(B >= 1,:);
q = length(edges)-1;
bincount = accumarray(IJK, 1, [m,n,q]);
[highestcount, binnum] = max(bincount,[],3)
highestcount = 2×3
3 4 4 4 5 4
binnum = 2×3
7 6 9 3 7 6
ilin = find(B==binnum);
[i,j,k] = ind2sub(size(B), ilin);
slide = accumarray([i(:) j(:)], k(:), [m,n], @(k) {k.'});
Avalue = accumarray([i(:) j(:)], A(ilin(:)), [m,n], @(v) {v.'});
[r,c] = ndgrid(1:m,1:n);
r = r(:); c = c(:); slide = slide(:); Avalue=Avalue(:); binnum = binnum(:);
T = table(r, c, binnum, slide, Avalue)
T = 6×5 table
r c binnum slide Avalue _ _ ______ _______________ ______________________________________ 1 1 7 {[ 3 4 8]} {[ 0.6469 0.6739 0.6261]} 2 1 3 {[ 9 10 13 15]} {[ 0.2052 0.2092 0.2407 0.2721]} 1 2 6 {[ 3 7 8 15]} {[ 0.5394 0.5322 0.5644 0.5406]} 2 2 7 {[1 3 7 10 12]} {[0.6275 0.6546 0.6259 0.6836 0.6720]} 1 3 9 {[15 16 17 20]} {[ 0.8654 0.8613 0.8931 0.8730]} 2 3 6 {[ 9 14 16 19]} {[ 0.5944 0.5440 0.5698 0.5119]}

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Numeric Types에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by