Python - Calcul matriciels

Script Python permettant de calculer des matrices booléennes et décimales avec les principaux opérateurs.

from fractions import Fraction
import numpy as np

# Création de matrice 4x4
matrice_decimal1 = np.array([[1, 2, 8, 0],
[1, 4, 0, 1],
[0, 3, 2, 0],
[3, 1, 2, 1]])

matrice_decimal2 = np.array([[8, 1, 0, 4],
[1, 5, 1, 1],
[0, 0, 4, 3],
[4, 1, 0, 1]])

# Création de matrice binaire 4x4
matrice_binaire1 = np.array([[1, 1, 1, 0],
[1, 1, 0, 1],
[0, 1, 1, 0],
[0, 1, 0, 1]], dtype=bool).astype(int)

matrice_binaire2 = np.array([[1, 1, 0, 0],
[1, 1, 1, 1],
[0, 0, 0, 1],
[1, 0, 1, 1]], dtype=bool).astype(int)

# Opérations sur matrices booleennes
binaire_AND_resultat = np.logical_and(matrice_binaire1, matrice_binaire2).astype(int)
binaire_OR__resultat = np.logical_or(matrice_binaire1, matrice_binaire2).astype(int)
binaire_NOT_resultat = np.logical_not(matrice_binaire1, matrice_binaire2).astype(int)
binaire_XOR_resultat = np.bitwise_xor(matrice_binaire1, matrice_binaire2).astype(int)

# Opérations sur matrices decimale
decimal_addition_resultat = matrice_decimal1 + matrice_decimal2
decimal_soustraction_resultat = matrice_decimal1 - matrice_decimal2
decimal_multiplication_resultat = np.dot(matrice_decimal1, matrice_decimal2)
# inverse + division + fonction pour conserver les fractions
decimal_inverse_resultat = np.linalg.inv(matrice_decimal2)
decimal_division_resultat = np.dot(matrice_decimal1, decimal_inverse_resultat)
def format_fraction(element):
fraction = Fraction(element).limit_denominator()
return f"{fraction.numerator}/{fraction.denominator}"
decimal_division_resultat_fraction = np.vectorize(format_fraction)(decimal_division_resultat)



# Affichage des résultats

print("\n===========================================")
print("=========== MATRICES BOOLEENNES ===========")
print("===========================================")

print("\nOpération AND de matrices binaires :\n")
for ligne_matrice1, ligne_matrice2, ligne_resultat in zip(matrice_binaire1, matrice_binaire2, binaire_AND_resultat):
print(f"{ligne_matrice1} + {ligne_matrice2} = {ligne_resultat}")

print("\nOpération OR de matrices binaires :\n")
for ligne_matrice1, ligne_matrice2, ligne_resultat in zip(matrice_binaire1, matrice_binaire2, binaire_OR__resultat):
print(f"{ligne_matrice1} - {ligne_matrice2} = {ligne_resultat}")

print("\nOpération NOT de matrices binaires :\n")
for ligne_matrice1, ligne_matrice2, ligne_resultat in zip(matrice_binaire1, matrice_binaire2, binaire_NOT_resultat):
print(f"{ligne_matrice1} ~ {ligne_matrice2} = {ligne_resultat}")

print("\nOpération XOR de matrices binaires :\n")
for ligne_matrice1, ligne_matrice2, ligne_resultat in zip(matrice_binaire1, matrice_binaire2, binaire_XOR_resultat):
print(f"{ligne_matrice1} ^ {ligne_matrice2} = {ligne_resultat}")


print("\n===========================================")
print("=========== MATRICES DECIMALES ============")
print("===========================================")

print("\nAddition de matrices decimales M1+M2 :\n")
for ligne_matrice1, ligne_matrice2, ligne_resultat in zip(matrice_decimal1, matrice_decimal2, decimal_addition_resultat):
print(f"{ligne_matrice1} + {ligne_matrice2} = {ligne_resultat}")

print("\nSoustraction de matrices decimales M1-M2 :\n")
for ligne_matrice1, ligne_matrice2, ligne_resultat in zip(matrice_decimal1, matrice_decimal2, decimal_soustraction_resultat):
print(f"{ligne_matrice1} - {ligne_matrice2} = {ligne_resultat}")

print("\nMultiplication de matrices decimales M1*M2 :\n")
for ligne_matrice1, ligne_matrice2, ligne_resultat in zip(matrice_decimal1, matrice_decimal2, decimal_multiplication_resultat):
print(f"{ligne_matrice1} x {ligne_matrice2} = {ligne_resultat}")

print("\nDivision de matrices decimales M1/M2=M1×M2^-1 :\n")
for ligne_matrice1, ligne_matrice2, ligne_resultat in zip(matrice_decimal1, matrice_decimal2, decimal_division_resultat_fraction):
print(f"{ligne_matrice1} / {ligne_matrice2} = {ligne_resultat}")

Sortie :

===========================================
=========== MATRICES BOOLEENNES ===========
===========================================

Opération AND de matrices binaires :

[1 1 1 0] + [0 0 0 1] = [1 1 0 0]
[1 1 0 1] + [0 0 1 0] = [1 1 0 1]
[0 1 1 0] + [1 0 0 1] = [0 0 0 0]
[0 1 0 1] + [1 0 1 0] = [0 0 0 1]

Opération OR de matrices binaires :

[1 1 1 0] - [0 0 0 1] = [1 1 1 0]
[1 1 0 1] - [0 0 1 0] = [1 1 1 1]
[0 1 1 0] - [1 0 0 1] = [0 1 1 1]
[0 1 0 1] - [1 0 1 0] = [1 1 1 1]

Opération NOT de matrices binaires :

[1 1 1 0] ~ [0 0 0 1] = [0 0 0 1]
[1 1 0 1] ~ [0 0 1 0] = [0 0 1 0]
[0 1 1 0] ~ [1 0 0 1] = [1 0 0 1]
[0 1 0 1] ~ [1 0 1 0] = [1 0 1 0]

Opération XOR de matrices binaires :

[1 1 1 0] ^ [0 0 0 1] = [1 1 1 1]
[1 1 0 1] ^ [0 0 1 0] = [1 1 1 1]
[0 1 1 0] ^ [1 0 0 1] = [1 1 1 1]
[0 1 0 1] ^ [1 0 1 0] = [1 1 1 1]

===========================================
=========== MATRICES DECIMALES ============
===========================================

Addition de matrices decimales M1+M2 :

[1 2 8 0] + [8 1 0 4] = [9 3 8 4]
[1 4 0 1] + [1 5 1 1] = [2 9 1 2]
[0 3 2 0] + [0 0 4 3] = [0 3 6 3]
[3 1 2 1] + [4 1 0 1] = [7 2 2 2]

Soustraction de matrices decimales M1-M2 :

[1 2 8 0] - [8 1 0 4] = [-7 1 8 -4]
[1 4 0 1] - [1 5 1 1] = [ 0 -1 -1 0]
[0 3 2 0] - [0 0 4 3] = [ 0 3 -2 -3]
[3 1 2 1] - [4 1 0 1] = [-1 0 2 0]

Multiplication de matrices decimales M1*M2 :

[1 2 8 0] x [8 1 0 4] = [10 11 34 30]
[1 4 0 1] x [1 5 1 1] = [16 22 4 9]
[0 3 2 0] x [0 0 4 3] = [ 3 15 11 9]
[3 1 2 1] x [4 1 0 1] = [29 9 9 20]

Division de matrices decimales M1/M2=M1×M2^-1 :

[1 2 8 0] / [8 1 0 4] = ['-25/8' '-11/38' '315/152' '999/152']
[1 4 0 1] / [1 5 1 1] = ['3/8' '33/38' '-33/152' '-109/152']
[0 3 2 0] / [0 0 4 3] = ['-3/4' '9/19' '29/76' '105/76']
[3 1 2 1] / [4 1 0 1] = ['-5/8' '-3/38' '79/152' '307/152']
> Partager <