meshgrid provides wrong dimensions
24 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Nathaniel Werner
el 21 de Jun. de 2017
Comentada: Dyuman Joshi
el 16 de Oct. de 2023
Hello,
I am using the meshgrid function to try and make a grid for my surface plots. My x,y, and z arrays are length 102, 42, and 102 respectively. But when I run [X,Y,Z] = meshgrid(x,y,z) the output has the wrong dimensions. X, Y and Z are 42 x 102 x 102 not 102 x 42 x 102. Can someone help me understand what is going wrong with this?
I tried playing around with the order and if I have [X,Y,Z] = meshgrid(y,x,z) it gives the correct output size of 102 x 42 x 102. For now I can run the code using this alternative order but I would like to know why it is making the wrong size.
Thanks
1 comentario
Respuesta aceptada
Jan
el 21 de Jun. de 2017
Editada: Jan
el 21 de Jun. de 2017
Why do you assume that the output is "wrong"? It is exactly how defined in the documentation:
[X,Y,Z] = meshgrid(x,y,z) returns 3-D grid coordinates defined by the
vectors x, y, and z. The grid represented by X, Y, and Z has size
length(y)-by-length(x)-by-length(z).
Well, length(y)-by-length(x)-by-length(z) sounds strange, I agree. But the function works as advertised. Note: Never trust your expectations, what a function returns, but trust only the documentation. Intuition is fine, but programming languages have been designed by human. ;-)
A similar problem is gradient:
[FX,FY] = gradient(F)
Now FX is along the "horizontal direction", FY the "vertical direction". Sounds okay. But in
[FX,FY,FZ] = gradient(F)
the 1st output concerns the 2nd dimension, the 2nd output the 1st one and the 3rd output the 3rd one. Brrr.
5 comentarios
Stephen23
el 13 de Oct. de 2023
Editada: Stephen23
el 13 de Oct. de 2023
"but why that "strange" output and not a "normal" one? just for curiosity"
The reason is due to humans and the graphics they like to look at: when given a matrix of data, many use-cases interpret the horizontal direction as the horizontal axes... and the vertical direction as the vertical axes. This is most likely what you would expect when you display a matrix as an image (otherwise displaying a matrix of data in the command window would be transposed to how it would look when displayed as an image... ouch!). But consider this: the horizontal axes is mathematically defined as the 2nd matrix dimension, while the vertical axes as the 1st matrix dimension. So humans get the first two dimensions mixed up: they prefer the independent-axes as the X-axes and the dependent-axes as the Y-axes... but note that this means the 2nd and 1st matrix dimensions respectively. Ouch.
In essence it is due to an inconsistency between the mathematical definition of matrices/arrays (i.e. NDGRID) and graphics/image/plotting expectations (i.e. MESHGRID). Note that this is not specific to MATLAB: it applies to all graphics apps/libraries and all mathematical apps/libraries.
You can find some explanations here:
This not just something that MATLAB has to contend with, see the indexing option here:
and another blog, apparently written by someone with a graphics background:
This has been discussed many times before:
Más respuestas (0)
Ver también
Categorías
Más información sobre Startup and Shutdown en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!