人类的线性代数:一个非常好的向量几何和线性代数工具带
vg的Python项目详细描述
VG
人类线性代数:averygood向量几何 线性代数工具带。使简单的NumPy操作变得可读。
示例
规范化向量堆栈:
# ?vs_norm=vs/np.linalg.norm(vs,axis=1)[:,np.newaxis]# ?vs_norm=vg.normalize(vs)
检查零矢量:
# ?is_almost_zero=np.allclose(v,np.array([0.0,0.0,0.0]),rtol=0,atol=1e-05)# ?is_almost_zero=vg.almost_zero(v,atol=1e-05)找到主要变化轴(第一主成分):< >
# ?mean=np.mean(coords,axis=0)_,_,pcs=np.linalg.svd(coords-mean)first_pc=pcs[0]# ?first_pc=vg.major_axis(coords)
计算两个向量堆栈之间的成对角度:
# ?dot_products=np.einsum("ij,ij->i",v1s.reshape(-1,3),v2s.reshape(-1,3))cosines=dot_products/np.linalg.norm(v1s,axis=1)/np.linalg.norm(v1s,axis=1)angles=np.arccos(np.clip(cosines,-1.0,1.0))# ?angles=vg.angle(v1s,v2s)
功能
请参阅完整的api引用:https://vgpy.readthedocs.io/en/latest/
所有函数都可以选择矢量化,这意味着它们接受单个输入和 可交换的输入堆栈。他们返回正确的东西-一个 结果或一堆结果–无需重新调整输入或输出。 借助于numpy的强大功能,矢量化函数速度很快。
安装
pip install numpy vg
用法
importnumpyasnpimportvgprojected=vg.scalar_projection(np.array([5.0,-3.0,1.0]),onto=vg.basis.neg_y)
设计原则
线性代数是有用的,它不必很难使用。与 抽象的力量,简单的操作可以变得简单,无需费力 通过演讲幻灯片、教科书、难以捉摸的堆栈溢出答案,或 密集的神经病。使用线性代数和几何变换的代码 应该像英语一样可读,不影响效率。
这些常见操作应该抽象为几个原因:
如果开发人员不是每天都在编程linalg,他们可能会忘记 基本公式。这些表格更容易记住,也更容易 参考。
这些表单倾向于以numpy表单是 不是。如果开发人员不是每天都在编程linalg,那么 派上用场。
这些实现更加健壮。他们会自动检查 在他们的论点上,所以如果论点是向量,他们也同样有效 或者一堆向量。他们更仔细地检查边沿的箱子 就像零范数或零叉积,返回正确的结果 或提出适当的错误。
版本控制
这个库遵循Semantic Versioning。
致谢
这个集合是由Paul Melnikow在身体实验室开发并提取的
来自Body Labs的代码库,并作为blmathby Alex
Weiss的一部分开源。后来,保罗·梅尔尼科(paul melnikow)和后来的
名称空间vx
被分解为自己的包。项目已重命名
解决名称冲突。
许可证
该项目根据两条BSD许可证获得许可。