gpt4 book ai didi

python - 如何检测非方阵的所有行是否在python中正交

转载 作者:太空狗 更新时间:2023-10-29 22:13:18 24 4
gpt4 key购买 nike

我可以使用 np.linalg.matrix_rank(A) 测试矩阵的秩。但是如何有效地测试 A 的所有行是否正交?

我可以获取所有行对并计算它们之间的内积,但有更好的方法吗?

我的矩阵的行数少于列数,并且行不是单位向量。

最佳答案

这个答案基本上总结了问题和评论中提到的方法,并添加了一些关于它们的比较/见解


方法 #1 -- 检查所有行对

正如您所建议的,您可以遍历所有行对,并计算内积。如果 A.shape==(N,M),即每行有 N 行,每行大小为 M,最终复杂度为 O(M*N^2)。

方法 #2 -- 矩阵乘法

正如@JoeKington 在评论中所建议的那样,您可以计算乘法 A.dot(A.T),并检查所有非对角线元素。根据用于矩阵乘法的算法,这可以是 faster比朴素的 O(M*N^2) 算法,但只是渐进地更好。除非您的矩阵很大,否则它们会变慢。


方法#1 的优点:

  • 您可以“短路”——一旦找到第一个非正交对就退出检查
  • 需要更少的内存。在 #2 中,您创建了一个临时的 NxN 矩阵。

方法 2 的优点:

  • 乘法速度很快,因为它是在高度优化的线性代数库(ATLAS 的 BLAS)中实现的。我相信这些库会根据输入大小选择正确的算法(即它们不会在小矩阵上使用花哨的算法,因为它们对于小矩阵来说速度较慢。O 符号背后隐藏着一个很大的常数)。<
  • 编写更少的代码

我敢打赌,对于小矩阵,方法 #2 会证明更快,因为 LA 库经过了大量优化,尽管事实上它们计算了整个乘法,即使在处理了第一对非正交行之后也是如此。

关于python - 如何检测非方阵的所有行是否在python中正交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23503667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com