Matlab - Matlab: Encontrar porcentaje de valores bajos en un vector y convertirlos en cer0

 
Vista:
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Matlab: Encontrar porcentaje de valores bajos en un vector y convertirlos en cer0

Publicado por Fabián (19 intervenciones) el 15/09/2017 17:14:19
Cordial saludo.

Tengo un vector de Mx1 valores; necesito crear una función que me permita encontrar el porcentaje requerido (x´ejemplo: 10%, 30%, 50% de los valores mas bajos) y convertirlos a 0, y con el cual pueda por supuesto generar un vector diferente para relacionar el porcentaje escogido.


Estaré muy agradecido a quién pueda darme una mano.

Cordialmente.

Fabián
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Matlab: Encontrar porcentaje de valores bajos en un vector y convertirlos en cer0

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 15/09/2017 18:05:33
puedes emplear esta función :

1
2
3
4
function ind=porcentaje(valores,per)
s=round(length(valores)*per/100);
[~,ind]=sort(valores);
ind=ind(1:s);

valores es tu vector y per es tu porcentaje , por ejemplo :

1
2
a=[9 3 5 2 4 1 8 6 3];
b=porcentaje([9 3 5 2 4 1 8 6 3],50);

en b te aparecen los indices de los 50% valores más bajos, para hacerlos 0 solo necesitas hacer luego:

1
2
a(b)=0;
disp(a)

saludos
https://www.facebook.com/royethmatlab/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Matlab: Encontrar porcentaje de valores bajos en un vector y convertirlos en cer0

Publicado por Fabián (19 intervenciones) el 15/09/2017 19:21:04
Hola Jesús; gracias por contestar; he seguido tus indicaciones y me aparece el siguiente mensaje:

Function definitions are not permitted in this context.

He tratado de indagar pero no encuentro razón a ello

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Matlab: Encontrar porcentaje de valores bajos en un vector y convertirlos en cer0

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 15/09/2017 19:55:42
1
2
3
4
function ind=porcentaje(valores,per)
s=round(length(valores)*per/100);
[~,ind]=sort(valores);
ind=ind(1:s);

esta función debes guardarla en un archivo aparte en la misma carpeta donde estás trabajando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Matlab: Encontrar porcentaje de valores bajos en un vector y convertirlos en cer0

Publicado por Fabián (19 intervenciones) el 16/09/2017 20:52:55
Hola Jesús; ha funcionado de maravilla; que bueno eres.
Mil gracias.
Funciona perfecto¡¡¡

Fabián
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Matlab: Encontrar porcentaje de valores bajos en un vector y convertirlos en cer0

Publicado por Fabián (19 intervenciones) el 28/09/2017 17:45:21
Cordial saludo.

En mi anterior inquietud (que fue solucionada perfectamente por Jesús), se asignaba un valor estático porcentual para llevar a cero esos valores, lo anterior a partir de las directrices dadas por Jesús.

Ahora necesito hacerlo dinámicamente y me cree 100 valores porcentuales en un solo archivo (correspondientes al cálculo desde 1% hasta 100%)

De esa forma la columna 1 tendrá el valor correspondiente de la matriz con el 1%, en la 2, con el 2 % y así sucesivamente hasta una columna 100 que tenga los valores del 100%

Lo imagino con un for que me permita recorrer la función 100 veces, pero después de no lograrlo recurro a su gran ayuda para buscar una solución, de antemano, gracias

Fabián
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Matlab: Encontrar porcentaje de valores bajos en un vector y convertirlos en cer0

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 28/09/2017 21:06:01
con la misma función Anterior:

1
2
3
4
5
6
7
8
9
a=[9 3 5 2 4 1 8 6 3];
todos=zeros(length(a),100);
for k=1:100
    s=a;
b=porcentaje(s,k);
s(b)=0;
todos(:,k)=s';
end
disp(todos)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Matlab: Encontrar porcentaje de valores bajos en un vector y convertirlos en cer0

Publicado por Fabián (19 intervenciones) el 29/09/2017 12:31:38
Jesús, mil y más gracias nuevamente. Va perfecto

Fabián
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar