Nhân ma trận Boolean

Oct 21 2020

Tôi đang cố gắng gộp nhiều 2 ma trận Boolean một cách rõ ràng, bất kể số hàng hoặc cột.

Ví dụ nếu A = [[0, 1, 1], [1, 0, 1]]và B = [[1, 0], [0, 0], [0, 1]],sau đó sản phẩm là [[0, 1], [1, 1]].

Chỉnh sửa: Tôi muốn điều này một cách rõ ràng mà không có numpy.

Trả lời

3 juju89 Oct 20 2020 at 22:18

Câu trả lời này hoạt động mà không cần 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

Cài đặt numpy (pip cài đặt 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)

Điều này tạo ra kết quả:

[[Sai Đúng] [Đúng Đúng]]

Giống như [[0,1], [1,1]]

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

Tôi đã tìm thấy câu trả lời mà không có bất kỳ nhập không cần thiết nào:

>>> 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

Đầu tiên bạn có thể chuyển nó sang ndarray, sau đó nhân chúng lên.

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)