这应该是一个非常简单的问题,但由于某种原因,我得到了不合理的混淆,而且Matlab文档没有帮助。
给定一个统一的坐标网格(x_i,y_j,z_k)
,我想在Matlab中创建一个三维数组F
,使F(i,j,k)=f(x_i,y_j,z_k)
。以下显然不正确:
x=linspace(-1,1,100) % uniform mesh on [-1,1]^3
[X,Y,Z]=meshgrid(x);
f=X.*Y.*sin(pi*Y.*Z) % for example
我需要在某个地方使用permute
吗?我知道我可以简单地制作一个三重循环,但我们知道这很慢。
谢谢!
答案 0 :(得分:4)
使用ndgrid
代替meshgrid
,以避免第一维和第二维之间的不必要的排列。
从文档中看(另见here):
MESHGRID与NDGRID类似,只是前两个输入的顺序 和输出参数被切换(即,[X,Y,Z] = MESHGRID(x,y,z) 产生与[Y,X,Z] = NDGRID(y,x,z))
相同的结果