number of elements

3 visualizaciones (últimos 30 días)
Hassan
Hassan el 28 de Abr. de 2011
I have an array A(1483 rows, 417 columns) with integer values of 1 to 5. I want to know whithin each block 92*92(i:i+91,j:j+91), what is the percentage of each value. I looked at size(), hist(), numel() but I don't think they can do what I want. Could you please help me?

Respuesta aceptada

Walter Roberson
Walter Roberson el 28 de Abr. de 2011
M = A(i:i+91,j:j+91);
h = histc(M(:), 1:5);
p = h ./ (92*92) * 100;
  1 comentario
Hassan
Hassan el 28 de Abr. de 2011
thanks a lot Walter. your code works fine.
I wrote the following code but yours is more efficient, shorter and faster.
M = A(i:i+91,j:j+91);
n=numel(M)
n1=numel(find(M==1))
n2=numel(find(M==2))
n3=numel(find(M==3))
n4=numel(find(M==4))
n5=numel(find(M==5))
p1=n1*100/n
p2=n2*100/n
p3=n3*100/n
p4=n4*100/n
p5=n5*100/n

Iniciar sesión para comentar.

Más respuestas (1)

Andrei Bobrov
Andrei Bobrov el 28 de Abr. de 2011
variant the full solutions
A = randi([1 5], 1483,417);
m = 92;
mn = fix(size(A)/m);
Awork = A(1:mn(1)*m,1:mn(2)*m);
A1 = reshape(permute(reshape(Awork,m,mn(1),m,[]),[1 3 2 4]),m^2,[]);
A2 = arrayfun(@(x)histc(A1(:,x),1:5),1:prod(mn),'UniformOutput' , false);
Out = cell2mat(A2)/m^2;
more variant
A = randi([1 5], 1483,417);
m = 92;
mn = fix(size(A)/m);
Awork = A(1:mn(1)*m,1:mn(2)*m);
A1 = reshape(permute(reshape(Awork,m,mn(1),m,[]),[1 3 2 4]),m^2,[]);
Out = cell2mat(arrayfun(@(x)histc(A1(:,x),1:5)/nnz(A1(:,x)),1:prod(mn),'UniformOutput' , false));
  6 comentarios
Walter Roberson
Walter Roberson el 29 de Abr. de 2011
In my code, if you have some 0 values that you need to be ignored when calculating percentages, then instead of using
p = h ./ (92*92) * 100;
you should use
p = h ./ sum(h) * 100;
Note though that this will give a vector of nan if all the elements in the block are zero.
Hassan
Hassan el 29 de Abr. de 2011
thanks a lot Walter.

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by