【问题标题】:numpy: why array multiplication is commutative?numpy:为什么数组乘法是可交换的?
【发布时间】:2014-02-28 22:22:40
【问题描述】:

我对 python 很陌生,对 numpy 来说真的很陌生。 我意识到使用 numpy 我可以在所有配置中乘以数组: 行*列、列*行、列*列、行*行。

这是什么意思? 我认为这是矩阵乘法,唯一合法的是行*列, 或列*行,结果是零维或二维。 我对这个操作感到困惑。

【问题讨论】:

  • numpy 操作通常是元素方面的。另请阅读broadcasting rules 以了解不同维度的数组会发生什么。
  • 哦,如果你需要矩阵乘法,试试np.matrix(a) * np.matrix(b),或np.dot(a,b)

标签: python numpy


【解决方案1】:

我以为这是矩阵乘法

除非您使用 matrix 对象或 dot 方法/函数,否则它不是。它是元素乘法,对于不匹配的维度,还有一些称为broadcasting 的额外处理。如果要矩阵乘法,请使用

numpy.dot(A, B)

您也可以使用matrix 对象而不是ndarrays,但是它们导致的不一致可能会令人讨厌。你需要知道如果给定一个矩阵,什么操作会返回一个矩阵,什么总是会返回一个数组,而A[x][y] 将不起作用,还有更多的小问题会让你搞砸。

【讨论】:

    【解决方案2】:

    Numpy 数组是 N 维网格数据,它们的大多数二元运算都执行元素级标量运算。 a * b 产生 a[i,j,k] * b[i,j,k]。如果数组的形状不同,numpy 将尝试将较小的数组broadcast 转换成仍然有意义的东西,然后执行元素操作。

    Numpy 矩阵是一个单独的数据结构。它们始终是二维的,并且遵循您在线性代数中学到的所有规则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多