Filter löschen
Filter löschen

meshgrid provides wrong dimensions

28 Ansichten (letzte 30 Tage)
Nathaniel Werner
Nathaniel Werner am 21 Jun. 2017
Kommentiert: Dyuman Joshi am 16 Okt. 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 Kommentar
Stephen23
Stephen23 am 22 Jun. 2017
Bearbeitet: Stephen23 am 22 Jun. 2017
That is the correct behavior of meshgrid. You should be using ndgrid instead.
(And learn to navigate to the bottom of the help page, where you will find a list of "See Also" functions. You would have found ndgrid yourself quite simply by scrolling to the bottom of the page)

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jan
Jan am 21 Jun. 2017
Bearbeitet: Jan am 21 Jun. 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 Kommentare
Stephen23
Stephen23 am 13 Okt. 2023
Bearbeitet: Stephen23 am 13 Okt. 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:
Dyuman Joshi
Dyuman Joshi am 16 Okt. 2023
Nice explaination, @Stephen23!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Tags

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by