Python numpy对三维点的操作汇总(持续更新)

Prerequisite

import numpy as np

将一个列表中的点或者其他对象转换成一个numpy.ndarray对象

points = np.asarray([[1,2,3],[3,4,5],[6,7,8]])

查看numpy.ndarray的形状

##  n : numpy.ndarray 
n.shape

计算点到原点的欧几里得距离

# points like array([[x1,y1,z1],[x2,y2,z2],[x3,y3,z3]])
distances = np.linalg.norm(points, axis=1)

np.linalg.norm(x, ord=None, axis=None, keepdims=False)​求范数

x:是输入的矩阵or向量

ord:计算的范数类型。ord=2计算L2范数,即欧几里得距离,ord=1计算L1范数。

axis:轴,axis=0按列计算,axis=1按行计算

选择欧几里得距离符合一定范围内的点

# 获得点距离原点的欧几里得距离大于0.1小于70的点索引
np.where((distances >= 0.01) & (distances <= 70))[0]

#筛选这些点
points[np.where((distances >= 0.01) & (distances <= 70))]

https://www.delftstack.com/zh/howto/numpy/python-numpy.where-multiple-conditions/#%e5%9c%a8-python-%e4%b8%ad%e4%bd%bf%e7%94%a8-numpylogical_or-%e5%87%bd%e6%95%b0%e5%ae%9e%e7%8e%b0-numpywhere-%e5%a4%9a%e4%b8%aa%e6%9d%a1%e4%bb%b6

对点进行旋转

# 给定一个3*3的旋转矩阵 rotation_matrix, 对点points进行旋转,获得旋转后的点坐标。
np.dot(points, rotation_matrix.T)

注意这里需要对旋转矩阵做了转置,推导一下

np.dot矩阵乘法,他的用法是?和np.matmul​的区别?

对点进行平移

# 给定一个平移向量translation_vector, 对点points进行平移,获得旋转后的点坐标。
points + translation_vector
文章作者: Met Guo
文章链接: https://guoyujian.github.io/2023/09/16/Python-numpy%E5%AF%B9%E4%B8%89%E7%BB%B4%E7%82%B9%E7%9A%84%E6%93%8D%E4%BD%9C%E6%B1%87%E6%80%BB%EF%BC%88%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0%EF%BC%89/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gmet's Blog