代码之家  ›  专栏  ›  技术社区  ›  Gaurav Srivastava

用元素作为另外两个numpy数组形成numpy数组时的广播错误

  •  0
  • Gaurav Srivastava  · 技术社区  · 6 年前

    我正在尝试生成一个numpy数组,其中的元素与另外两个numpy数组一样,如下所示。

    W1b1 = np.zeros((256, 161)) W2b2 = np.zeros((256, 257)) Wx = np.array([W1b1, W2b2], dtype=np.object)

    这给出了一个错误:ValueError:不能将输入数组从形状(256161)广播到形状(256)。

    但是,如果我对w1b1和w2b2采用完全不同的维度,则不会得到错误,如下所示。

    A1 = np.zeros((256, 161))
    A2 = np.zeros((257, 257))
    A3 = np.array([A1, A2], dtype=np.object)
    

    我不明白第一段代码中的错误以及为什么numpy数组试图广播一个输入数组。

    我试过下面的版本(python 2.7.6,numpy 1.13.1)和(python 3.6.4,numpy1.14.1)。

    1 回复  |  直到 6 年前
        1
  •  1
  •   hpaulj    6 年前

    别指望 np.array(..., object) 制作正确的对象数组。目前,我们无法控制它产生了多少维度。可以想象,它可以生成(2,)数组或(256)(包含1d内容)。有时有效,有时会产生错误。有某种模式,但我还没有看到对代码的分析,它确切地显示了正在发生的事情。

    现在更安全的做法是分配数组并填充它:

    In [57]: arr = np.empty(2, object)
    In [58]: arr[:] = [W1b1, W2b2]
    

    np.array([np.zeros((3,2)),np.ones((3,4))], object) 也会引发此错误。所以当第一个维度匹配时,错误就会出现,但后面的维度不匹配。现在我想起来了,我以前见过这个错误。

    早些时候关于这个话题的问题

    numpy array 1.9.2 getting ValueError: could not broadcast input array from shape (4,2) into shape (4)

    Creation of array of arrays fails, when first size of first dimension matches

    Creating array of arrays in numpy with different dimensions