Matlab - Subconjunto de un vector de índices menos ciertos valores ¿con 'datasample'?

   
Vista:

Subconjunto de un vector de índices menos ciertos valores ¿con 'datasample'?

Publicado por Aitor (46 intervenciones) el 13/01/2017 14:10:10
Buenas tardes,

Tras mucho darle al coco, creo que he conseguido llegar al fin a una solución para mi otro hilo (http://www.lawebdelprogramador.com/foros/Matlab/1582663-Rellenado-de-una-matriz-con-unos-a-partir-de-sus-distribuciones.html).

Sin embargo, antes necesito resolver una última duda.

Supongamos que tenemos un vector de 50 valores naturales, tales como:
b = [2, 2, 3, 4, 5, 6, 4, 2, 1, 5, 6, 7, 8, 9, 9, 10, 10 10, (...), 38]
(por ejemplo)
Necesitaría de la manera más simple y con menos líneas de código posible construir un subconjunto con aquellos índices de este vector b cuyos valores sean distintos de cero.
1
c = datasample(1:length(b), {longitud de la secuencia de índices que desee obtener}, 'replace', 'false');
(Realmente los parámetros 'Replace' y 'false' no son necesarios para este caso ya que tratándose de un vector de índices estaba claro
He pensado en usar la función datasample para este propósito.que no habría repetición).
Sin embargo, este método no tiene en cuenta aquellos índices para cuyo elemento pudiera valer 0. En tal caso, ese índice debe seguir contando a pesar de no seguir siendo seleccionable. Es decir, si tuviéramos:
b = [1, 4, 5, 2, 0, 9]
El elemento '6' (correspondiente al último índice de b) debería seguir poder siendo seleccionable para cualquier subconjunto. Es decir, no vale con quitar los 0 de b, ya que entonces cambiarían todas las posiciones de los índices y esa situación no es deseable.
¿Alguien tiene alguna solución?

¡Muchas gracias de nuevo de antemano, y ojalá podamos salir de dudas pronto!
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

Subconjunto de un vector de índices menos ciertos valores ¿con "datasample"?

Publicado por Aitor (46 intervenciones) el 13/01/2017 16:49:33
Creo que ya he encontrado la respuesta, sólo había que pensar un poquito...

1
2
3
4
5
6
b_i = 1:length(b);
for j=1:1:length(b)
    if b(j) == 0
        b_i = setdiff(b_i,b_i(j));
    end
end

¡Gracias de todas formas!

Un saludo,
Aitor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar