Matlab 如何使用我的数据为surf()创建二维矩阵?

Matlab 如何使用我的数据为surf()创建二维矩阵?,matlab,matrix,Matlab,Matrix,我有一个25000x3矩阵,每行包含一个x、一个y和一个z值。现在我想用这些做一个图形绘制。但是对于使用例如surf(Z),我必须使用一个mxn矩阵,作为Z,m等于x的大小,n等于y的大小。如何将我拥有的矩阵重塑为所需的mxn矩阵?问题是我的x和y值不是整数,而是浮点值,所以我假设我必须先做插值。这是真的吗?我用plot3绘制的数据如下所示: 事实上,x和y值不是整数根本不是问题。真正的问题是:你的(x,y)点是否形成一个网格 如果点正在形成网格,则必须重塑柱的形状以形成m×n阵列。您可能需要

我有一个25000x3矩阵,每行包含一个x、一个y和一个z值。现在我想用这些做一个图形绘制。但是对于使用例如surf(Z),我必须使用一个mxn矩阵,作为Z,m等于x的大小,n等于y的大小。如何将我拥有的矩阵重塑为所需的mxn矩阵?问题是我的x和y值不是整数,而是浮点值,所以我假设我必须先做插值。这是真的吗?我用plot3绘制的数据如下所示:

事实上,x和y值不是整数根本不是问题。真正的问题是:你的(x,y)点是否形成一个网格

  • 如果点正在形成网格,则必须重塑柱的形状以形成m×n阵列。您可能需要根据第一列、第二列对数据进行
    排序
    ,然后使用
    重塑
    功能

  • 如果点没有形成网格,则必须进行插值。偶然的机会,它可以很好地帮助您这样做


如您所见,您提供的数据既不是以网格方式给出的,也不是干净的点云。但是,您可以尝试执行以下操作:

  • 将点云投影到x-y平面上
  • 对这些点进行三角测量
  • 将点返回其原始z坐标
  • 使用图形绘制曲面
  • 下面是一个实现此功能的MATLAB代码:

    %// Generate some points P
    [X,Y] = ndgrid(0:30);
    P = [X(:), Y(:), X(:).^2+Y(:)];
    %%// Here the actual computation starts
    [~,I] = unique(P(:,1:2),'rows'); %// Remove points with duplicate (x,y)-coords
    P = P(I,:);
    T = delaunay(P(:,1),P(:,2)); %// Triangulate the 2D-projection
    surface = triangulation(T, P(:,1), P(:,2), P(:,3)); %// Project back to 3D
    trisurf(surface); %// Plot
    

    不过,您可能希望首先删除散乱点。

    您的意思是,如果我的值类似于X(i)=Y(i)?不,事实并非如此。所谓网格,我的意思是:你的(x,y)对映射了矩形网格的所有可能对吗?我不知道。我该怎么查呢?x和y的大小相等。如果不是为之设计的,它映射网格的可能性很小。无论如何,要检查这一点,您可以首先查看
    unique(x)
    (我们称之为
    u
    )和
    unique(y)
    (我们称之为
    v
    )元素的数量,并检查
    u*v
    是否等于初始数组的大小,也就是25000。你有没有把随机数据集做成网格的真正代码?这将取决于那里实际有什么数据。如果您
    plot3(A(:,1),A(:,2),A(:,3),')
    ,它看起来像
    (x,y)
    的函数吗?(例如,MATLAB徽标是,但球体不是)您可以上传这个,这样我们可以看一看。您是否设法将随机排序的数据集制作成网格?是的,但afaik我切换到python。仍然需要检查这一点…我如何确定我是否有偏离点?当我在我的数据上使用你的代码时,我得到了一个非常奇怪的结果,它看起来不像我的第一个图像。@阿尔卡卢普斯:比你的其他点高得多的点,我会认为是杂散点。但这是一个继承限制,即需要平滑曲面数据来绘制曲面。如果您的数据非常嘈杂,您可能只想使用
    plot3
    scatter3
    @arc\u lube来绘制曲面:您试图实现的不是用我的数据为surf创建一个2d矩阵,而是您实际想要做的,这是一项更困难的任务。@arc\u lube:是的,这是正确的。当然,这取决于您想对这些数据做什么,但是如果您不满足于点云绘图,而是想要一个平滑的曲面,则必须进行手动清理或深入研究更难的问题。