Matlab - Dividir vectores en otros

 
Vista:
sin imagen de perfil

Dividir vectores en otros

Publicado por Fran (5 intervenciones) el 15/10/2020 14:00:14
Hola!
Tengo una matriz de datos que corresponde a datos de un sujeto en un experimento compuesto por 120 ensayos. La matriz tiene 5631 datos y me gustaría saber como podría dividir las variables de en una secuencia fija de 46 datos (que son los que corresponden a cada ensayo). Lo que hago es importar el vector de cada variable y creo las distintos vectores a través del comando:
>>Segmento1=X(1:46,1)
De manera que me extrae un nuevo vector con esos 46 primeros datos, que corresponden a un trial, y así sucesivamente.

Después de este paso si me gustaría transformar todos estos vectores en una matriz de datos. Muchas gracias por adelantado. 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
sin imagen de perfil

Dividir vectores en otros

Publicado por Fran (5 intervenciones) el 16/10/2020 10:36:09
Tengo un vector columna llamado Left_Pupil (5631x1 double), por ejemplo (he puesto una pequeña parte de los números, puesto que no me deja subir imágenes)
4.4248
4.4313
4.4808
4.5220
4.4771
4.4825
4.5129
4.5043
4.4988
4.4964
4.4961
4.4856
4.5023
4.5424
4.7969
NaN
NaN
NaN
4.3599
4.1205
4.0478
4.0288
4.1331
NaN
NaN
NaN
NaN
NaN
NaN
NaN
4.6607
4.7388
4.8353
4.9106
4.8982
NaN
NaN
NaN
NaN
NaN
NaN
4.7287
4.8311
4.7819
4.7453
4.7140
4.6732
4.6733
4.7499
4.6761
4.6092
4.7156
4.7443
4.7421
NaN
NaN
NaN
NaN
NaN
4.6988
4.6872
NaN
4.5079
4.4918
4.2932
4.0323
3.7699
3.6313
3.5964
3.5754
3.5722
3.5735
3.6398
3.8189
NaN
NaN
NaN
NaN
4.2770
4.3946
4.5472
4.6394
4.7184
NaN
NaN
NaN
NaN
NaN
NaN
4.5952
4.5878
4.5899
Me gustaría dividir este vector columna en varias, concretamente en 120, con un intervalo fijo de 46 números, esto es del 1º al 46º, del 47º al 92º, del 93º al 132º, y así sucesivamente. Finalmente quedarían 120 vectores de 46 números de ese vector previo llamado Left_Pupil.
Y tras esto me gustaría unirlos todos en una matriz o tabla para exportarla a Excel, de manera que quede una tabla con 120 columnas.
Espero haberme explicado mejor. Gracias, 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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Dividir vectores en otros

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 16/10/2020 15:35:15
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
A=[4.4248
4.4313
4.4808
4.5220
4.4771
4.4825
4.5129
4.5043
4.4988
4.4964
4.4961
4.4856
4.5023
4.5424
4.7969
NaN
NaN
NaN
4.3599
4.1205]
M=reshape(A,[4, length(A)/4])
 
 
M =
 
    4.4248    4.4771    4.4988    4.5023       NaN
    4.4313    4.4825    4.4964    4.5424       NaN
    4.4808    4.5129    4.4961    4.7969    4.3599
    4.5220    4.5043    4.4856       NaN    4.1205

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
Servicio de Asesoría Online en Matlab


https://programacioncaballero.blogspot.com/
https://www.facebook.com/programacioncaballero
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
sin imagen de perfil

Dividir vectores en otros

Publicado por Fran (5 intervenciones) el 17/10/2020 14:46:11
Muchas gracias, pero ahora me da error y es que al dividir por 47 la lomgitud (5631) debe dar como resultado un entero. Me acabo de dar cuenta que los intervalos que necesito deben ser de 44 y eliminar los 3 números que le siguen a cada intervalo, de esta manera si sería válido.
Es decir si
X= 1
2
3
4
5
6
7
8
9
10
Me gustaría convertirla en una matriz tal que así
M=
[1 5 9
2 6 10]
En este caso, de un vector de 10 números se ha sacado una matriz en la que cada columna está constituida por dos números consecutivos y vaya descartando los dos siguientes, y después vuelva a coger lo dos siguientes y eliminar los dos siguientes a estos últimos, y así sucesivamente.
Espero que me haya explicado, muchas gracias por su atenció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: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Dividir vectores en otros

Publicado por Daniel (354 intervenciones) el 17/10/2020 17:51:14
Hola,

Lo que tienes que hacer es redondear al entero más bajo el número de columnas. Lo que se pude hacer con la función floor. Pero, como reshape necesita que se asignen todos los valores hay que eliminar los que sobran antes (en el ejemplo que plantea no es necesario, pero si en primer enunciado). Algo como

1
2
3
4
5
6
7
A = 1:10;
 
cols = 2;
rows = floor(length(A)/cols);
reg = cols * rows;
 
M = reshape(A(1:reg),[cols, rows])

Con lo que se crear una matriz de 2 por 5.

1
2
3
4
M =
 
     1     3     5     7     9
     2     4     6     8    10

Ahora solo queda por eliminar las columnas que sobran, en este caso las impares:

1
M(:, 2:2:end) = []

1
2
3
4
M =
 
     1     5     9
     2     6    10

Saludos,
Daniel Rodríguez
Analytics Lane
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