2 votes

Multiplication de matrices booléennes

J'essaie d'expliciter des matrices booléennes multiples de 2, quel que soit le nombre de lignes ou de colonnes.

Par exemple, si A = [[0, 1, 1], [1, 0, 1]] y B = [[1, 0], [0, 0], [0, 1]], alors le produit est [[0, 1], [1, 1]] .

Edit : Je veux que cela soit explicite sans l'option numpy .

3voto

juju89 Points 568

Cette réponse fonctionne sans numpy :

from itertools import starmap
from operator import mul
A = [[0, 1, 1], [1, 0, 1]]
B = [[1, 0], [0, 0], [0, 1]]
result = [[sum(starmap(mul, zip(row, col))) for col in zip(*B)] for row in A]
print(result)
>> [[0, 1], [1, 1]]

1voto

Installer numpy (pip install numpy)

import numpy as np
a = np.matrix([[0,1,1],[1,0,1]], dtype=bool)
b = np.matrix([[1,0],[0,0],[0,1]], dtype=bool)
print(a*b)

Cela donne le résultat :

[[Faux Vrai] [[Vrai Vrai]]

Ce qui est la même chose que [[0,1],[1,1]]

0voto

meng luo Points 21

Vous pourriez d'abord les convertir en ndarray, puis les multiplier.

import numpy as np

A = np.array( [[0, 1, 1], [1, 0, 1]], dtype=bool)
B = np.array([[1, 0], [0, 0], [0, 1]], dtype=bool)
result = np.dot(A, B)

print(result)

0voto

I a trouvé une réponse sans importations inutiles :

>>> A = [[0, 1, 1], [1, 0, 1]]
>>> B = [[1, 0], [0, 0], [0, 1]]
>>> [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*B)] for X_row in A]
[[0, 1], [1, 1]]

-1voto

Binyamin Even Points 1477
>> np.matmul(A,B)

array([[0, 1],
       [1, 1]])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X