【问题标题】:Null matrix with constant diagonal, with same shape as another matrix具有恒定对角线的空矩阵,与另一个矩阵具有相同的形状
【发布时间】:2011-08-16 16:28:52
【问题描述】:

我想知道是否有一种简单的方法可以将一个 numpy 矩阵乘以一个标量。本质上,我希望所有值都乘以常数 40。这将是一个对角线上有 40 的 nxn 矩阵,但我想知道是否有更简单的函数可以用来缩放这个矩阵。或者我将如何制作一个与我的另一个矩阵形状相同的矩阵并填充它的对角线?

对不起,如果这看起来有点基本,但由于某种原因我在文档中找不到这个。

【问题讨论】:

    标签: python matrix numpy


    【解决方案1】:

    简单:

    N = 100
    a = np.eye(N)  # Diagonal Identity 100x100 array
    b = 40*a  # Multiply by a scalar
    

    如果你真的想要一个 numpy 矩阵而不是一个数组,你可以改用a = np.asmatrix(np.eye(N))。但总的来说* 是 numpy 中的元素乘法。

    【讨论】:

    • 如果性能是一个问题,OP 可能不想创建一个副本b,在这种情况下a*=40 将就地缩放数组。
    • numpy.fill_diagonal() 专门用于用给定元素填充对角线。因此,它比构造单位矩阵然后将其所有元素乘以一个常数更加明确和快速。
    【解决方案2】:

    如果你想要一个对角线上有 40 并且其他地方都是零的矩阵,你可以在一个零矩阵上使用 NumPy 的函数fill_diagonal()。因此,您可以直接这样做:

    N = 100; value = 40
    b = np.zeros((N, N))
    np.fill_diagonal(b, value)
    

    这仅涉及将元素设置为某个值,因此可能比涉及将矩阵的所有元素乘以常数的代码更快。这种方法还具有明确显示您用特定值填充对角线的优点。

    如果您希望对角矩阵 b 与另一个矩阵 a 的大小相同,您可以使用以下快捷方式(无需显式大小 N):

    b = np.zeros_like(a)
    np.fill_diagonal(b, value)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多