Matlab - Restar a un vector un subconjunto de sus elementos con repetición

 
Vista:
sin imagen de perfil
Val: 68
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Restar a un vector un subconjunto de sus elementos con repetición

Publicado por Aitor (49 intervenciones) el 06/01/2017 15:04:51
Hola, buenas tardes,

En esta ocasión escribo para preguntar si conocéis alguna forma de permitir, mediante el uso del comando subdiff, la resta a un vector de un subconjunto de sus elementos, permitiendo las repeticiones.

Para explicarme mejor, un ejemplo de uso del comando subdiff sería el siguiente:

1
2
3
4
5
6
A = [3 6 2 1 5 1 1];
B = [2 4 6];
C = setdiff(A,B)
C =
 
     1     3     5

En mi caso tengo un vector que contiene muchos elementos que se repiten. Cada vez que extraigo un subconjunto del mismo para restárselo a continuación éste tiene que estar formado por elementos que no se repitan. Por eso siempre siguen quedando un montón de repeticiones, y por esto no puedo utilizar 'subdiff' tal cual.

Muchas gracias como siempre por vuestra ayuda, y un saludo.
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Restar a un vector un subconjunto de sus elementos con repetición

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 06/01/2017 15:57:12
1
2
3
4
5
6
7
clear all
vector = [3 8 6 2 8 1 5 1 1 8 9  7]
[valores_unicos, ind_unicos] = unique(vector,'stable')
ind_repetidos = setdiff(1:length(vector),ind_unicos)
valores_repetidos = vector(ind_repetidos)
valores_repetidos_unico=unique(valores_repetidos,'stable')
vector_para_sacar_subjconjunto = setdiff(valores_unicos, valores_repetidos_unico)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
>> resta_de_conjuntos
 
vector =
 
     3     8     6     2     8     1     5     1     1     8     9     7
 
valores_unicos =
 
     3     8     6     2     1     5     9     7
 
 
ind_unicos =
 
     1
     2
     3
     4
     6
     7
    11
    12
 
 
ind_repetidos =
 
     5     8     9    10
 
 
valores_repetidos =
 
     8     1     1     8
 
 
valores_repetidos_unico =
 
     8     1
 
 
vector_para_sacar_subjconjunto =
 
     2     3     5     6     7     9

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.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
sin imagen de perfil
Val: 68
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Restar a un vector un subconjunto de sus elementos con repetición

Publicado por Aitor (49 intervenciones) el 06/01/2017 17:16:31
Buenas tardes Jose,

Muchas gracias por tu respuesta.

Creo que antes no me he explicado muy bien, así que te pondré un ejemplo si te parece para que sirva de ayuda:

Supón que tenemos
1
2
β=[1,1,2,2,3,3]
c = [2,3]
Donde c es un subconjunto de los elementos de β, sin repetición (en nuestro caso tomaría los elementos 2 y 3).
Desearía que en este caso, la salida fuera
1
salida = [1, 1, 2, 3]
Es decir, teniendo en cuenta los elementos que se repiten del vector de muestras original, invalidando de esta forma el uso de la función 'subdiff' (cuya salida sería igual a [1, 2, 3]; ya que no tiene en cuenta dichas repeticiones).

Quedando de nuevo muy agradecido por tu ayuda, me despido.
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 Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Restar a un vector un subconjunto de sus elementos con repetición

Publicado por Royeth (1818 intervenciones) el 06/01/2017 18:21:45
debes implementar recursividad ya que la función elimina las repeticiones al final

este código te sirve:

1
2
3
4
5
b=[1,1,2,2,3,3];
c = [2,3];
for k=1:length(c)
b(find(b==c(k),1,'first'))=[];
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Restar a un vector un subconjunto de sus elementos con repetición

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 06/01/2017 18:49:37
1
2
3
4
5
6
7
8
clear all
A=[1,1,2,2,3,3]
B = [2,3]
for i=1:length(B)
  [rep, posi]=find(A==B(i));
  A(posi(1:end-1))=[];
end
 A

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> resta_de_conjuntos1
 
A =
 
     1     1     2     2     3     3
 
 
B =
 
     2     3
 
 
A =
 
     1     1     2     3


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.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