2017-10-19 126 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) 
相關問題