2017-10-19 5 views
1

をswapingことにより、別の行列に変換することができるならば、我々は明らかに我々が列交換によりBに行列Aを「変換」することができますnumpyの検査行列は、列

>>> 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]]) 

をたどるようなマトリックスABを持っていると言います。このように2つの(潜在的に大きい)行列を互いに変換できるかどうかをチェックする効率的なアルゴリズムはありますか?

+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) 
関連する問題