这个答案基本上总结了问题和评论中提到的方法,并添加了一些关于它们的比较/见解
方法#1 - 检查所有行对
正如您所建议的那样,您可以遍历所有行对,并计算内部产品.如果A.shape==(N,M)
,即每行有N行大小为M,则最终会出现O(M*N ^ 2)复杂度.
方法#2 - 矩阵乘法
正如@JoeKington在评论中所建议的那样,你可以计算乘法A.dot(A.T)
,并检查所有非对角元素.根据用于矩阵乘法的算法,这可能比天真的O(M*N ^ 2)算法更快,但只是渐近更好.除非你的矩阵很大,否则它们会变慢.
方法#1的优点:
方法#2的优点:
我敢打赌,对于小矩阵,方法#2将证明更快,因为LA库被大量优化,并且尽管他们计算整个乘法,即使在处理第一对非正交行之后也是如此.
看来这样做了
product = np.dot(A,A.T)
np.fill_diagonal(product,0)
if (product.any() == 0):
Run Code Online (Sandbox Code Playgroud)