微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在matlab中从3列表创建网格

如何解决在matlab中从3列表创建网格

我有一个表格,其中包含从我想制作等高线图的 csv 中提取的值。 我们以这张表为例

tdata.x = [1;2;1;2];
tdata.y = [3;3;4;4];
tdata.z = randn(4,1);
tdata=struct2table(tdata);
>> tdata
tdata =
  4×3 table
    x    y       z   
    _    _    _______
    1    3    0.53767
    2    3     1.8339
    1    4    -2.2588
    2    4    0.86217

我想旋转它以便我可以用它来绘制轮廓,所以原则上我想要一个 2x2 z 矩阵,其中行/列分别由 y 和 x 给出,在这个方向上:

 x 1        2
y                                                                           
3  0.53767  1.8339
4  -2.2588  0.86217

其中第一行是 x 坐标,第一列是 y 坐标,中间是相应的 z 值。也就是说(x,y)=(1,4)对应的z值是-2.2588。

请注意,我将使用此网格处理其他事情,因此涉及插值的解决方案无效,并且保证在网格上提供数据。

解决方法

您可以使用unstack,即

t = unstack( tdata,{'z'},{'x'} );

哪个会给你这个:

enter image description here

请注意,列名都以 x 为前缀,因为列名不能以数字开头。您应该能够再次提取 x 值,特别是如果它们总是整数,它不会太难,无论您想从这里进行什么操作...

,

这是我将使用的方法:

result = full(sparse(findgroups(tdata.y),findgroups(tdata.x),tdata.z));

等效地,您可以使用 unique 的第三个输出代替 findgroups,或使用 accumarray 代替 sparse

[~,~,ux] = unique(tdata.x);
[~,uy] = unique(tdata.y);
result = accumarray([uy ux],tdata.z);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。