【问题标题】:numpy broadcasting between matrix and vector? [duplicate]矩阵和向量之间的numpy广播? [复制]
【发布时间】:2016-03-01 01:37:35
【问题描述】:

我正在学习 numpy 线性阿尔格巴,我想执行一个简单的计算: 我有:

m = np.array([[1,2],
              [3,4],
              [5,6]]
v = np.array([10,20,30])

我要计算/输出的内容:

[ [1/10, 2/10], 
  [3/20, 4/20],
  [5/30, 6/30]]

基本上是在 m 的每一行和 v 的每个元素之间进行元素划分

我可能可以通过一些 for 循环来做到这一点,但我想知道“正确”的做法。

我感觉它与广播有关,但仅此而已。

谢谢。

【问题讨论】:

  • 谢谢这正是我想要的
  • 链接到 numpy 的 outer product 以防你来这里寻找它。

标签: python numpy array-broadcasting


【解决方案1】:

您需要将v 的元素与m 的第一个轴对齐。这样做的一种方法是将v 扩展到具有np.newaxis/None 的二维数组,然后broadcasting 在执行元素除法时发挥作用。此外,由于两个输入都是整数数组并且您正在执行除法,因此您需要在执行元素除法之前将其中一个转换为浮点数。因此,最终的实现将是 -

m/v[:,None].astype(float)

如果您使用 NumPy 的真正除法函数np.true_divide 处理浮点转换在后台,您可以避免在用户级别转换为浮点数组>。所以,它的实现将是 -

np.true_divide(m,v[:,None])

示例运行 -

In [203]: m
Out[203]: 
array([[1, 2],
       [3, 4],
       [5, 6]])

In [204]: v
Out[204]: array([10, 20, 30])

In [205]: m/v[:,None].astype(float)
Out[205]: 
array([[ 0.1       ,  0.2       ],
       [ 0.15      ,  0.2       ],
       [ 0.16666667,  0.2       ]])

In [206]: np.true_divide(m,v[:,None])
Out[206]: 
array([[ 0.1       ,  0.2       ],
       [ 0.15      ,  0.2       ],
       [ 0.16666667,  0.2       ]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    相关资源
    最近更新 更多