2016-05-19 3 views
0

I ein Problem dahingehend zu lösen, dass, wenn ich ein Element in einer MxN-Matrix gleich 0 ist, seine gesamte Zeile und Spalte auf 0.maximaler Bit zu speichern, in einzelner ganzen Zahl Python variable

eingestellt werden zuerst zwei Variablen zero_row und zero_col werden eingeführt, um die Zeilen und Spalten zu speichern, die auf 0 gesetzt werden müssen. Als nächstes wiederhole ich die Elemente in der Matrix, setze den Bit-Offset der Zeile in zero_row und den Bit-Offset der Spalte in zero_col auf 1, wenn das Element gleich 0 ist. Dann gehe ich die Matrix erneut durch und setze jede Zeile und Spalte auf Null, wenn die Bitoffsets in zero_row und zero_col auf 1 gesetzt sind.

zero_row und zero_col werden anfangs auf 0 gesetzt. Also nehme ich an, es ist ein Integer-Typ. Ich arbeite an einem 64-Bit-Computer. Daher dachte ich, das maximale Bit, das ich setzen könnte, ist 64 Bit (pro Integer). Ich bin neugierig, warum der Code mit einem Array von 3x144 immer noch richtig funktioniert. Die Spaltengröße 144 Bit ist offensichtlich größer als 64 Bit ... Führt Python automatisch "Typcasting" durch? oder vielleicht kann mich irgendjemand auf die Dokumentationen hinweisen, die das Grundlegende erklären. Vielen Dank.


import numpy 

class Matrix: 
    def __init__(self): 
     pass 

    def check_matrix(self, input_mat): 
     zero_row = 0 
     zero_col = 0 
     for row in xrange(len(input_mat)): 
      for col in xrange(len(input_mat[row])): 
       if zero_row >> row & 1 == 0 or zero_col >> col & 1 == 0: 
        if input_mat[row][col] == 0: 
         zero_row = zero_row | 1 << row 
         zero_col = zero_col | 1 << col 
     return [zero_row, zero_col] 

    def set_matrix(self, input_mat, zero_row, zero_col): 
     for row in xrange(len(input_mat)): 
      for col in xrange(len(input_mat[row])): 
       if (zero_row >> row) & 1 == 1 or (zero_col >> col) & 1 == 1: 
        input_mat[row][col] = 0   
     return input_mat 


m = Matrix() 
# input_arr = numpy.array([[1,1,1], [2, 0, 2], [3, 3, 3]]) 
# input_arr = numpy.array([[1,1,1], [2, 2, 2], [0, 3, 0]]) 
input_arr = numpy.array([ 
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], 
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2], 
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,3,0] 
        ]) 
[zero_row, zero_col] = m.check_matrix(input_arr) 
print bin(zero_row), " ", bin(zero_col) 
print m.set_matrix(input_arr, zero_row, zero_col)   

Ergebnisse:

0b100 0b101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

[[ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0] 
[ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 2 0] 
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]] 
+0

siehe [diese Frage] (http://stackoverflow.com/q/7604966/1274789) – Pedru

Antwort

0

Werfen Sie einen Blick die documentation an. Python wird automatisch Ihre ganzen Zahlen auf unbegrenzte Genauigkeit erweitern, so dass es egal ist, ob Sie auf einem 64-Bit-System sind.

Verwandte Themen