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)