2017-10-19 7 views
1

Disons que nous avons matrice A et B comme suit matriceNumpy vérifier si une matrice peut être transformée en une autre matrice par des colonnes 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]]) 

Il est clair que nous pouvons « transformer » A à B par swapping de colonne. Existe-t-il un algorithme efficace pour vérifier si deux matrices (potentiellement grandes) peuvent être transformées l'une par l'autre de cette manière?

+2

Trier par colonne et vérifier si les matrices résultantes sont égales. – kazemakase

+0

Est-ce que ça roule ou il peut y avoir un échange * correct *? Il semble rouler pour l'échantillon donné comme 'B = A [:, [2,3,0,1]]'. – Divakar

+0

@kazemakase merci! Cela devrait fonctionner. Ne sait pas numpy fournit une méthode de tri de matrice –

Répondre

0

Voici une fonction simple. Pour une très grande matrice, il est possible que (A==B).all() soit plus lent que 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)