人类的线性代数:一个非常好的向量几何和线性代数工具带

vg的Python项目详细描述


VG

versionpython versionlicensebuilddocs buildcode style

人类线性代数: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)

设计原则

线性代数是有用的,它不必很难使用。与 抽象的力量,简单的操作可以变得简单,无需费力 通过演讲幻灯片、教科书、难以捉摸的堆栈溢出答案,或 密集的神经病。使用线性代数和几何变换的代码 应该像英语一样可读,不影响效率。

这些常见操作应该抽象为几个原因:

  1. 如果开发人员不是每天都在编程linalg,他们可能会忘记 基本公式。这些表格更容易记住,也更容易 参考。

  2. 这些表单倾向于以numpy表单是 不是。如果开发人员不是每天都在编程linalg,那么 派上用场。

  3. 这些实现更加健壮。他们会自动检查 在他们的论点上,所以如果论点是向量,他们也同样有效 或者一堆向量。他们更仔细地检查边沿的箱子 就像零范数或零叉积,返回正确的结果 或提出适当的错误。

版本控制

这个库遵循Semantic Versioning

致谢

这个集合是由Paul Melnikow在身体实验室开发并提取的 来自Body Labs的代码库,并作为blmathby Alex Weiss的一部分开源。后来,保罗·梅尔尼科(paul melnikow)和后来的 名称空间vx被分解为自己的包。项目已重命名 解决名称冲突。

许可证

该项目根据两条BSD许可证获得许可。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java jgrapht SimpleDirectedWeightedGraph规范化权重   java安卓使用CFB   java如何从javaclass警告浏览器?可能吗?   javagson结构难点   java使用jbossclient的最佳方式是什么。Wildfly 10应用程序中的jar?   JAVA:socket重写以使用CipherInputStream和CipherOutputStream   java Android UI测试长时间点击并拖动   java如何在Android中重置AtomicInteger唯一Id?   多线程客户端/服务器应用程序上的java客户端断开连接   GAE Memcache中的java损坏值   java如何使用变量作为资源的路径?   爪哇?(三向)操作员