Numpy ValueError将元组列表广播到数组中

安德基尔

我正在观察使用numpy广播的一些奇怪行为。该问题如下所示,其中运行第一段代码会产生错误:

A = np.ones((10))
B = np.ones((10, 4))
C = np.ones((10))
np.asarray([A, B, C])

ValueError: could not broadcast input array from shape (10,4) into shape (10)

如果我改为使用B来扩展B的尺寸B = np.expand_dims(B, axis=0),它将成功创建数组,但是现在(错误地)它具有错误的尺寸:

array([array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),
   array([[[1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.]]]),
   array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])], dtype=float32)

为什么它不能广播第一个示例,并且如何才能得到一个如下所示的数组(请注意第二个数组周围只有双括号)?任何反馈都非常感谢。

array([array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),
   array([[1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.]]),
   array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])], dtype=object)
乌尔里希·斯特恩

例如,包括None阻止广播,因此可以选择以下解决方法:

np.asarray([A, B, C, None])[:-1]

结果如下:

array([array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.]),
       array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]]),
       array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])], dtype=object)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章