【问题标题】:Reshape for array multiplication/division in python重塑python中的数组乘法/除法
【发布时间】:2011-11-19 19:21:47
【问题描述】:

当我处理长度相同但一个宽度只有一个的数组时,我遇到了一个恼人的形状不匹配问题。例如:

import numpy as np
x = np.ones(80)
y = np.ones([80, 100])
x*y 

ValueError: shape mismatch: objects cannot be broadcast to a single shape

简单的解决方案是 y*x.reshape(x.shape[0],1)。但是,我经常最终对数组的一列进行子集化,然后必须指定此重塑。有没有办法避免这种情况?

【问题讨论】:

    标签: python numpy shape


    【解决方案1】:

    两种比较简单的方法是:

    (x * y.T).T
    

    x.reshape((-1,1)) * y
    

    Numpy 的broadcasting 是一个非常强大的功能,并且会自动执行您想要的操作,但它希望数组的最后一个轴(或多个轴)具有相同的形状,而不是第一个轴。因此,您需要转置y 才能使其工作。

    第二个选项与您所做的相同,但 -1 被视为数组大小的占位符,从而减少了一些输入。

    【讨论】:

    • x.reshape((-1, 1)) 的替代方法是 x[:, np.newaxis]。它在公式中可能更具可读性
    【解决方案2】:

    首选的方法是使用“newaxis”,即

    x[:, numpy.newaxis] * y
    

    可读性强,效率高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      相关资源
      最近更新 更多