python - Numpy 不一起广播兼容的形状
问题描述
以下代码在 Python 3.8.3 中给我一个错误:
import numpy as np
a = np.random.rand(10, 5, 2)
b = np.random.rand(10, 5)
c = a/b
有错误
ValueError: operands could not be broadcast together with shapes (10,5,2) (10,5)
但这两种形状应该是兼容的吧?我可以通过使用 b[:, :, None] 来使除法工作,但是广播中的 Numpy 页面没有任何迹象表明这种额外的语法是必要的。也许我快疯了,但我可以发誓我以前写过这样的代码并且没有任何错误。我在这里想念什么?
解决方案
Numpy(自动)向左广播但不向右广播。这就是您的代码出错的原因
import numpy as np
a = np.random.rand(10, 5, 2)
b = np.random.rand(10, 5)
c = a / b # gives error
虽然这段代码有效
import numpy as np
a = np.random.rand(10, 5, 2)
b = np.random.rand(5, 2)
c = a / b
print('shape of c', c.shape)
这使
shape of c (10, 5, 2)
因此,请使用建议的解决方案或替代方案之一:
a = np.random.rand(10, 5, 2)
b = np.random.rand(10, 5)
c = a / b[..., None]
c = a / b[..., np.newaxis]
c = a / b[:, :, None]
c = a / b[:, :, np.newaxis]
推荐阅读
- qt - Qt5 样式表:仅在默认设置上应用样式
- javascript - jQuery选中的限制复选框
- ios - 您如何为 swift 的有效用户名编写正则表达式?
- c# - 通过 C# 中的向上和向下箭头键导航 ListViewItem
- java - Netbeans 8.2 不创建单个项目
- android - 即使成功插入许多记录,游标也始终为空
- vba - 适用于 VBA 的 MathType 7 SDK
- node.js - 在内存中缓冲数据 - 从未调用过 Writable.final() 钩子
- java - Java Deprecated APIs 和 SuppressWarnings “deprecation” - 实用方法
- python - 如何在打印语句中开始新行