【问题标题】:Multiplying Boolean Matrices布尔矩阵相乘
【发布时间】:2020-10-20 15:05:53
【问题描述】:

无论行数或列数如何,我都在尝试显式地计算多个 2 个布尔矩阵。

例如,如果A = [[0, 1, 1], [1, 0, 1]]B = [[1, 0], [0, 0], [0, 1]], 则产品为[[0, 1], [1, 1]]

编辑:我想明确地不使用numpy

【问题讨论】:

  • 虽然尺寸不一样
  • 如果您愿意使用numpy,那么import numpy as np;np.dot(A,B)
  • 那些不是布尔值,它们是整数值。
  • 布尔值可以用数字表示,0为假,1为真
  • 你尝试了什么?矩阵乘法的公式是已知的,翻译成python应该不难。

标签: python matrix boolean


【解决方案1】:

This answer 在没有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]]

【讨论】:

  • 这看起来不错,但我对星图和 zip 不熟悉
  • 你需要导入starmap,不是吗?
【解决方案2】:

安装 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)

这会产生结果:

[[假真] [真真]]

同[[0,1],[1,1]]

【讨论】:

    【解决方案3】:

    found an answer 没有任何不必要的导入:

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

    【讨论】:

      【解决方案4】:

      你可以先把它传给ndarray,然后再相乘。

      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)
      

      【讨论】:

      • 如果你确实想做布尔数组乘法,为什么不先用数字代替,然后用 False 替换 0,用 True 替换 1。然后你得到结果。
      【解决方案5】:
      >> np.matmul(A,B)
      
      array([[0, 1],
             [1, 1]])
      

      【讨论】:

        猜你喜欢
        • 2018-07-27
        • 2015-06-17
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        • 2016-12-11
        相关资源
        最近更新 更多