Ich versuche, eine nicht-sparige Binärmatrix zu invertieren (mod 2). Ich versuche es mit sehr sehr großen Matriuren wie 100_000 bis 100_000 zu tun. Ich habe Bibliotheken wie Sympy, Numpy, Numba ausprobiert. Die meisten davon tun dies mit Floats und wenden MOD 2 bei jedem Schritt nicht an. Im Allgemeinen meldet Numpy die Determinante eines zufälligen binären invertierbaren Arrays der Größe 1000 von 1000 als Inf.
Diese Funktion ist auch schön, da ich auch dann den Rang sehen kann. < /p>
Code: Select all
def binary_inv(A):
n = len(A)
A = np.hstack((A.astype(np.bool_),np.eye(n,dtype=np.bool_)))
for i in range(n):
j = np.argmax(A[i:,i]) + i
if i!=j:
A[[i,j],i:] = A[[j,i],i:]
A[i,i] = False
A[A[:,i],i+1:] ^= A[i:i+1,i+1:]
return A[:,n:]
Irgendwelche Gedanken darüber, dies so schnell wie möglich zu machen?