如何为三维轮廓坐标numpy数组添加x、y、z偏移量?
批量给Numpy三维坐标数组添加偏移量的正确方法
问题场景
现有存储多条空间轮廓坐标的Numpy ndarray,每个坐标点为[x,y,z]格式,示例数组如下:
arr= [[[0, 0, 0] [0, 0, 0]] [[0, 0, 0] [0, 0, 0]] [[0, 0, 0] [0, 0, 0]]]
需要给所有坐标添加统一偏移量:xOffset = 1、yOffset = 2、zOffset = 0,期望得到目标数组:
arr= [[[1, 2, 0] [1, 2, 0]] [[1, 2, 0] [1, 2, 0]] [[1, 2, 0] [1, 2, 0]]]
错误代码分析
尝试过以下代码,但会把偏移量错误地加到所有列,而非对应坐标列:
arr[:][:][0] += xOffset arr[:][:][1] += yOffset arr[:][:][2] += zOffset
原因是arr[:][:]会返回原数组的视图,相当于直接取整个数组,再索引[0]会取到第一个轮廓的所有点,而非所有轮廓的x坐标列。
正确实现方式
方法1:利用Numpy广播机制(推荐)
直接构造偏移量数组,通过广播实现批量相加:
import numpy as np # 定义偏移量 offset = np.array([xOffset, yOffset, zOffset]) # 批量添加偏移 arr += offset
方法2:指定坐标维度索引
通过正确的维度索引,定位所有点的x/y/z列:
# 给所有点的x坐标加偏移 arr[:, :, 0] += xOffset # 给所有点的y坐标加偏移 arr[:, :, 1] += yOffset # 给所有点的z坐标加偏移 arr[:, :, 2] += zOffset
这两种方法都能精准给对应坐标列添加偏移,得到预期结果。
内容的提问来源于stack exchange,提问作者Patman521
相关产品推荐
相关产品推荐

