为了账号安全,请及时绑定邮箱和手机立即绑定

python - 在具有相同“外部”大小的数组之间广播

python - 在具有相同“外部”大小的数组之间广播

LEATH 2021-06-07 09:50:16
Numpy 似乎对广播数组有一些(对我而言)不直观的行为。假设我们有两个数组a = numpy.ones((2,2,3))b = numpy.array([[1],[2]])我希望能够将这些相乘,输出为>>> a*barray([[[1., 1., 1.],        [1., 1., 1.]],       [[2., 2., 2.],        [2., 2., 2.]]])然而,我们得到>>> a*barray([[[1., 1., 1.],        [2., 2., 2.]],       [[1., 1., 1.],        [2., 2., 2.]]])事实上,这种乘法仅仅工作,因为该第二的尺寸a是相同的外尺寸b(图2,在这种情况下)。如果我们有a = numpy.ones((2,3,3)),我会收到以下错误:>>> a*bTraceback (most recent call last):  File "<stdin>", line 1, in <module>ValueError: operands could not be broadcast together with shapes (2,3,3) (2,1)我觉得这很奇怪的原因是,将具有形状 (3,4) 和 (1,) 的数组一起广播会很好地工作 - 那么为什么当它们是两个较大数组的“子数组”时它不起作用?什么是最“pythonic”的方式来做我想做的事?具体来说,这是为了创建一个 3D ndarray,其中每个 2D 子数组都具有重复的不同值。显然我可以只使用循环,但它看起来并不优雅。
查看完整描述

2 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

怎么样?


a = np.ones((2,2,3))

b = np.array([[[1],

              [1]],

               [[2],

              [2]]])


print(a*b)



array([[[1., 1., 1.],

        [1., 1., 1.]],


       [[2., 2., 2.],

        [2., 2., 2.]]])


查看完整回答
反对 回复 2021-06-09
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信