Numpy 检查矩阵是否可以通过交换列转换为另一个矩阵



假设我们有矩阵AB如下

>>> A
matrix([[0, 0, 0, 1],
        [1, 0, 0, 0],
        [1, 0, 0, 0]])
>>> B
matrix([[0, 1, 0, 0],
        [0, 0, 1, 0],
        [0, 0, 1, 0]])

显然,我们可以通过列交换将矩阵 A "转换"为 B。是否有一种有效的算法来检查两个(可能很大的)矩阵是否可以以这种方式相互转换?

这是一个简单的函数。对于非常大的矩阵,(A==B).all()可能比np.array_equal(A,B)慢。

import numpy as np
A = np.array([[0, 0, 0, 1],
              [1, 0, 0, 0],
              [1, 0, 0, 0]])
B = np.array([[0, 1, 0, 0],
              [0, 0, 1, 0],
              [0, 0, 1, 0]])
def isSwaping(a, b):
    count = 0
    for i, c in enumerate(a.T): # transpose of a
        for d in b.T:
            if (c == d).all(): 
                count += 1
                break
        if count == i : # then it is uncessary to continue
            return False
    return True
print isSwaping(A, B)

相关内容

  • 没有找到相关文章

最新更新