Matlab - Una pequeña duda

 
Vista:
sin imagen de perfil

Una pequeña duda

Publicado por Monica (36 intervenciones) el 18/12/2013 13:00:57
Hola a todos en la comunidad .. tengo una pregunta quizás fácil .. no lo se.
Tengo una matriz de 100x175x15 de 3 dimensiones ... y lo que me interesa es que en workspace el valor sea igual a
100x175x15x1 .. en realidad la matriz es la misma ya que si abro ambos archivos me muestra la misma matriz .. pero lo que necesito hacer es cojer la matriz 100x175x15x1 con esas dimensiones exactas, dentro de una archivo netcdf (esto si lo se hacer ... ) .. pero no se como darle ese '1' de la cuarta dimensión .. si en realidad no varia nada la matriz .. pero las dimensiones del netcdf son 4 .. entonces me da error ...

Resumiendo .. como puedo meterle ese '1' a mi matriz 100x175x15? ..

Espero que se entienda mi pregunta ..

Saludos cordiales
Mónica
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

Una pequeña duda

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/12/2013 00:01:14
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
>> a=rand(2,3,4) % 4 matrices de dimesion 2x3
 
a(:,:,1) =
 
    0.9427    0.9831    0.7011
    0.4177    0.3015    0.6663
 
 
a(:,:,2) =
 
    0.5391    0.6665    0.1280
    0.6981    0.1781    0.9991
 
 
a(:,:,3) =
 
    0.1711    0.5612    0.6692
    0.0326    0.8819    0.1904
 
 
a(:,:,4) =
 
    0.3689    0.9816    0.8555
    0.4607    0.1564    0.6448
 
>> a=rand(2,3,4,1) % 4x1 matrices de dimesion 2x3
 
a(:,:,1) =
 
    0.3763    0.4283    0.1206
    0.1909    0.4820    0.5895
 
 
a(:,:,2) =
 
    0.2262    0.5830    0.2904
    0.3846    0.2518    0.6171
 
 
a(:,:,3) =
 
    0.2653    0.9827    0.3439
    0.8244    0.7302    0.5841
 
 
a(:,:,4) =
 
    0.1078    0.8797    0.2607
    0.9063    0.8178    0.5944
 
>> a=rand(2,3,4,2) % 4x2 matrices de dimesion 2x3
 
a(:,:,1,1) =
 
    0.0225    0.3127    0.1788
    0.4253    0.1615    0.4229
 
 
a(:,:,2,1) =
 
    0.0942    0.4709    0.6999
    0.5985    0.6959    0.6385
 
 
a(:,:,3,1) =
 
    0.0336    0.3196    0.6544
    0.0688    0.5309    0.4076
 
 
a(:,:,4,1) =
 
    0.8200    0.9686    0.3251
    0.7184    0.5313    0.1056
 
 
a(:,:,1,2) =
 
    0.6110    0.4235    0.2665
    0.7788    0.0908    0.1537
 
 
a(:,:,2,2) =
 
    0.2810    0.5271    0.8754
    0.4401    0.4574    0.5181
 
 
a(:,:,3,2) =
 
    0.9436    0.9577    0.6761
    0.6377    0.2407    0.2891
 
 
a(:,:,4,2) =
 
    0.6718    0.0680    0.2240
    0.6951    0.2548    0.6678




Un vector de dos dimensiones lo puedes convertir a uno de tres dimensiones, poniendo ceros al tercer componente, usa ese mismo lógica en tu problema.


>> a=[1,3]

a =

1 3

>> b=[1,3,0]

b =

1 3 0

ambos vectores en el R^3, son los mismos, por eso dicen que hay isomorfismo entre R^2 y R^3

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com


http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Una pequeña duda

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/12/2013 12:15:15
No debes minimizar tus preguntas que haces en el foro, ese de pequeño duda, pueda que no sea cierto.
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

Una pequeña duda

Publicado por Monica (36 intervenciones) el 19/12/2013 12:23:38
Gracias por tu respuesta .. y a veces una por desconocimiento cree estar preguntando minimeces .. gracias por tu consejo!! .. a ver si me resulta la solución que me has propuesto .. ya comentaré algo!!

Saludos Mónica
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

Una pequeña duda

Publicado por Monica (36 intervenciones) el 19/12/2013 12:42:40
Hola .. tengo una duda para poder terminar de comprobar lo expuesto arriba..
Tengo una matriz de 175x100x15 y me he creado una matriz de ceros de iguales dimensiones 175x100x15 ...
¿Cómo puedo acoplar esta matriz de ceros a la original? .. esto para conseguir una matriz de valor 175x100x15x1 .. o no es así?? .. no me queda del todo clara la solución.

Saludos Cordiales
Mónica
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

Una pequeña duda

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/12/2013 12:51:34
De donde deduces que " si en realidad no varia nada la matriz .. pero las dimensiones del netcdf son 4 .", tiene 4 dimensiones, podrías mostrarnos esa parte.
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

Una pequeña duda

Publicado por Monica (36 intervenciones) el 19/12/2013 12:58:32
Por ejemplo: abajo dejo una de las variables del archivo netcdf ... al momento de extraer la variable temperatura mediante el ncread('ocean_ini.nc','temp') .. la matriz queda en 175x100x15 .. y lo que yo quiero es reemplazar el archivo temp .. mediante el comando ncwrite .. pero como son de diferente tamaño no me deja .. es que no puedo crear esa matriz de 175x100x15x1 ... se entiende mejor?? .. la variable 'ocean_time' es un valor 27594000 ...

temp
Size: 175x100x15x1
Dimensions: xi_rho,eta_rho,s_rho,ocean_time
Datatype: double
Attributes:
long_name = 'potential temperature'
units = 'Celsius'
time = 'ocean_time'
coordinates = 'lon_rho lat_rho s_rho ocean_time'


Saludos Mónica
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

Una pequeña duda

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/12/2013 13:14:40
No se entiende. Porque no pones mas líneas de tu código. Nos hablas de ncread y ncwrite pero en la parte de código que pones esa parte no se ve.
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

extraer datos antes de abrir el archivo netcdf

Publicado por Mario Alfredo (2 intervenciones) el 05/04/2016 19:29:28
Cordial saludo, tengo un problema. No sé como extraer un área definida de un archivo .nc antes de abrirlo.

El archivo es muy grande pues corresponde a una malla de todo el planeta y solo necesito una sección de la malla. por tanto necesito saber cual seria la notación para extraer esa área antes de abrir el archivo pues de estos son 600 archivos diferentes. Aunque de antemano tengo las posiciones "polares" de la sección que necesito. no se si me hago entender.
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 Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

extraer datos antes de abrir el archivo netcdf

Publicado por Dave (1094 intervenciones) el 05/04/2016 20:06:12
Hola Mario;

Sobre tu consulta y basado en mi experiencia, te recomiendo que primero ubiques tu área de estudio a través de los índices de latitud y longitud y luego estos índices los extraigas en la variable. La extracción lo puedes hacer a través de la función netcdf.getVar

Te dejo un ejemplo que podrías adaptarlo.

1
2
3
4
ncid1 = netcdf.open('precip.mon.ltm.nc','NC_NOWRITE');
precJanuary = netcdf.getVar(ncid1,3,[0 0 0],[144 72 1],'double');
lon1 = netcdf.getVar(ncid1,1,0,144);
lat1 = netcdf.getVar(ncid1,0,0,72);

​Espero que sea de alguna ayuda.

Saludos
Dave Correa
[email protected]
[email protected]
Servicios de Programación Matlab
http://fismatlab.org​​
http://fismatlab.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
Imágen de perfil de Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Una pequeña duda, Directo al Grano

Publicado por Dave (1094 intervenciones) el 19/12/2013 13:54:45
Hola Monica;

Entiendo tu consulta.
Tu estás trabajando con las salidas 4D (coordenadas rho, eta, nivel verticales y tiempo ) de un modelo oceánico y lo que deseas es cambiar los valores de un tiempo especifico, me imagino que lo deseas hacer porque eso datos servirán como entrada a otro modelo o quizás para análisis, en alguna ocasión he realizado ese procedimiento con los datos de batimetría, topografía, viento, temperatura o salinidad.

Sobre los comandos Netcdf, antes usaba la librería con los comandos ncread y ncwrite, pero en la actualidad utilizo el Netcdf propio de Matlab, la logica es un poco diferente, pero no creo que sea tan difícil adaptarte.

Sobre los datos, no deberías tener problemas en colocar o reemplazar una matriz de datos de 175x100x15 en una variable Netcdf de 175x100x15x1, el detalle está en manejar correctamente los indices de la dimensión tiempo de la variable temp.

En mi caso, lo haría de la siguiente manera (con el netcdf actual).

1
2
3
4
5
6
7
% Abrir el archivo netcdf.
% Definir que será un archivo de escritura
% No tienes que sacar los datos, bastaría con reemplazarlo o sobre escribirlos.
...
netcdf.putVar(ncid,varid_tmp,[0 0 0 0],[175 100 15 1],tmp_new);
...
% Cerrar el archivo.


Entonces, no es necesario que crees una matriz con una dimensión adicional, trata de fijarte en el indice del tiempo.

A continuación te coloco un link a un ejemplo de Netcdf.

http://www.mathworks.com/matlabcentral/answers/8529-creating-a-netcdf-file-in-matlab-2010b

Recuerdo los días con los modelos POM y ROMS.

Espero que sea de alguna ayuda,

Saludos
Dave Correa
[email protected]
Servicios de Programación Matlab
http://fismatlab.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
1
Comentar
sin imagen de perfil

Una pequeña duda, Directo al Grano

Publicado por Monica (36 intervenciones) el 19/12/2013 14:24:45
Muchas gracias Dave por tu aporte!!! ... efectivamente estoy trabajando con ROMS ... jejeje .. revisaré lo que tu me comentas, aunque estoy casi segura que si resultará .. ya he trabajado con la librería netcdf de matlab y no creo que se me haga difícil... no sabía que se podría reemplazar por ahí ....


Saludos Cordiales
Mónica
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