2017-10-19 117 views
1

假设我们有矩阵AB作为遵循numpy的检查,如果一个矩阵可以通过swaping列转换成另一个矩阵

>>> 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。有没有一种有效的算法来检查两个(可能很大)的矩阵是否可以通过这种方式相互转换?

+2

按列排序并检查结果矩阵是否相等。 – kazemakase

+0

它只是滚动或可能*正确*交换?对于给定的样本,似乎是滚动的:B = A [:,[2,3,0,1]]'。 – Divakar

+0

@kazemakase谢谢!这应该工作。不知道numpy提供了一个矩阵排序方法 –

回答

0

这是一个简单的功能。对于非常大的矩阵,有可能(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) 
相关问题