如何在Python中快速计算3D点的向量差矩阵?
用NumPy快速计算3D点对之间的向量差矩阵
直接利用NumPy的广播机制就能高效实现,完全不需要循环,具体步骤如下:
代码示例
import numpy as np # 示例输入点集 b = [[0,0,1], [1,0,2], [2,3,4]] # 将列表转换为NumPy数组 b_np = np.array(b) # 计算向量差矩阵:m[i][j] = b_i - b_j m = b_np[:, np.newaxis, :] - b_np[np.newaxis, :, :] # 输出结果验证 print(m)
原理说明
b_np[:, np.newaxis, :]将原数组从(n,3)形状扩展为(n,1,3),相当于把每个点作为独立的行向量组b_np[np.newaxis, :, :]扩展为(1,n,3),相当于把每个点作为独立的列向量组- 两者相减时,NumPy会自动触发广播机制,让每个行向量(
b_i)减去所有列向量(b_j),最终得到形状为(n,n,3)的结果矩阵,完全匹配需求中m_ij = b_i - b_j的定义
这种方法依托NumPy的底层C优化实现,计算效率远高于Python原生循环,即使处理大规模点集也能保持高效。
内容的提问来源于stack exchange,提问作者Sirdrakeistda
相关产品推荐
相关产品推荐

