Matlab - Randsample

   
Vista:

Randsample

Publicado por María (10 intervenciones) el 13/09/2011 19:40:55
Hola,

Estoy usando la función randsample para generar números con la probabilidad especificada en uno de sus argumentos (k(m,n)=randsample(numeros,1,true,probabilidad); donde numeros es un vector de 20 elementos que contiene los números del uno al 20, desordenados). Mi problema es que, los números generados no se pueden repetir, y para ello, puesto que la función randsample no soporta esto, he probado con diferentes bucles que comprueban si cada nuevo número generado es repetido y en tal caso volver a generar otro. Ahora bien, estos bucles se repiten muchas veces en el programa haciendo aumentar terriblemente el tiempo de ejecución.

¿Alguien tiene alguna propuesta?

Muchísimas gracias,

María.
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 JOSE JEREMIAS CABALLERO

Randsample

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3433 intervenciones) el 14/09/2011 05:39:35
HOla María
Digita en matlab en la ventana de comandos de matlab.
>help randsample
y tendras mas funciones como por ejemplo: randperm(n)

JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR MATLAB
jjcc94@hotmail.com
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

Randsample

Publicado por María (10 intervenciones) el 14/09/2011 12:19:48
Muchas gracias por tu respuesta José pero a randperm no le puedo pasar un vector de probabilidades. :S Así que esa función no me vale...
Un saludo.
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 JOSE JEREMIAS CABALLERO

Randsample

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3433 intervenciones) el 14/09/2011 14:45:49
hola Maria.
Segun comentas,ya haz probado con bucles.
Entonces porque no pones lo q haz avanzado para ver, q es lo quieres hacer exactamente.
Ademas puedes probarlo solo con 3 numeros, para ver como funciona?.

JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR MATLAB
jjcc94@hotmail.com
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

Randsample

Publicado por María (10 intervenciones) el 15/09/2011 14:49:12
Pues a ver.. He realizado algún cambio más y resumiendo: tengo lo siguiente:

m=randperm(20);

for j=1:10000
probabilidad=[0.2 0.15 0.1 0.05 0.2 0.15 0.1 0.05 0 0];
p=probabilidad;

for i=1:5
R(i)=randsample(m,1,true,p);
pos=find(m==R(i));
p(pos) = 0;
end

end

El problema es que si ejecuto profile me dice que el numero de llamadas a la función randsample es de 480000, cuando yo creo que debería ser 50000. :S
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 JOSE JEREMIAS CABALLERO

Randsample

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3433 intervenciones) el 15/09/2011 17:39:03
Hola Maria.
Como te vuelvo a recalcar.
Se puede hacer tu pregunta solo para randperm(4).
Y si es asi, como seria tu probalidad.
La idea es probar para el caso de pocos elementos y si alli funciona entonces funcionara para la cantidad de elementos que quieras.

Porque para pocos elementos se puede detectar mas rapido los errores.
DIVIDE Y LO VENCERAS"

JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR MATLAB
jjcc94@hotmail.com
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

Randsample

Publicado por Maria (10 intervenciones) el 23/09/2011 19:11:30
Pues he probado varios caminos, pero no me queda otro remedio que hacer el for en pararelo, porque ejecutar la función 10 000 veces ralentiza mucho. Probaré con parfor a ver que sale...
Muchas gracias José!
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 JOSE JEREMIAS CABALLERO

Randsample

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3433 intervenciones) el 23/09/2011 19:18:50
hola Maria.
Porque no pruebas en el sistema operativo windows xp 64 bits y matlab para 64 bits.

Caso contrario tendras que aprender programacion paralela.

JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR MATLAB
jjcc94@hotmail.com
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