我有一个numpy数组,其中包含表示点云的XYZ坐标。我想在列表中使用plyfile创建一个网格层文件,以便创建PLY网格文件。
vertex = [[52.45258174 78.63234647 -0.90487998]
[52.46268174 78.68184647 1.09133402]
[52.48928449 78.7930997 -0.90905187]
[52.49938449 78.84259974 1.08716213]
[52.5921233 78.92200466 -0.91276864]
[52.6022233 78.97150466 1.08344536]]
PLY_vertices = PlyElement.describe(np.array(vertex, dtype=[('x', 'f4'), ('y', 'f4'),('z', 'f4')]), 'vertex')
ValueError: only one-dimensional arrays are supported
2条答案
按热度按时间h43kikqp1#
类似这样的东西应该可以做到这一点:
它首先展平数组,然后创建所需的元组。
但是请记住,如果性能有问题,则应考虑使用3xN或Nx3坐标数组。
比如:
8hhllhi22#
https://pypi.org/project/plyfile/
显示了一些示例数组
它们看起来像元组数组,但实际上是
structured arrays
。数据类型部分很重要。我们可以进入构造方法,但首先需要提供上下文。
编辑
要创建结构化数组,数据必须是元组列表。
您的示例-二维数组:
将其转换为元组列表:
现在创建结构化数组:
还有一个实用函数可以做到这一点:
第二次编辑
探索
face
结构:由于(3,),第一个字段返回一个二维数组:
rf
函数可以处理这个嵌套的dtype:因此,如果你用足够的列创建一个2d数组,你可以创建一个
face
风格的结构化数组:同样,我只是从文档中提取的几个例子中工作。我还没有深入地研究过层格式。
有时,创建一个具有所需大小和dtype的“零”数组并单独填充字段值会更容易。许多
rf
函数都采用这种方法。通常数组的记录比字段多得多,所以我们不会因为在字段上迭代而损失太多的速度。