Mengalikan Matriks Boolean

Oct 21 2020

Saya mencoba untuk secara eksplisit mengalikan 2 matriks Boolean, terlepas dari jumlah baris atau kolomnya.

Misalnya jika A = [[0, 1, 1], [1, 0, 1]]dan B = [[1, 0], [0, 0], [0, 1]],kemudian produknya [[0, 1], [1, 1]].

Sunting: Saya ingin ini secara eksplisit tanpa numpy.

Jawaban

3 juju89 Oct 20 2020 at 22:18

Jawaban ini berfungsi tanpa 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]]
1 ReeceBoddington Oct 20 2020 at 22:22

Instal numpy (pip instal 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)

Ini menghasilkan hasil:

[[False True] [True True]]

Yang sama dengan [[0,1], [1,1]]

OlivérPalotás Oct 20 2020 at 22:27

Saya menemukan jawaban tanpa impor yang tidak perlu:

>>> 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]]
mengluo Oct 20 2020 at 22:10

Pertama-tama Anda dapat mentransfernya ke ndarray, lalu menggandakannya.

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)