【发布时间】:2019-06-29 16:53:20
【问题描述】:
我正在尝试使用np.piecewise 定义一个多元分段函数,如下所示:
X = np.array([
[1, 2],
[3, 4],
[5, 6]
])
pw = np.piecewise(
X,
[
np.abs(X[:, 0] - X[:, 1]) < 1,
np.abs(X[:, 0] - X[:, 1]) >= 1
],
[
lambda X: 1 + 2 * X[:, 0] + 3 * X[:, 1],
lambda X: 1.5 + 2.5 * X[:, 0] + 3.5 * X[:, 1]
]
)
运行这个 sn-p 会出现以下错误:
ValueError: shape mismatch: value array of shape (3,) could not be broadcast to indexing result of shape (3,2)
对于上下文,我试图在此示例中表示一个映射 f: R^2 -> R,同时在 X 的每一行上对其进行评估。
有什么想法吗?我是否需要以不同方式定义最终参数以便索引正确广播?
【问题讨论】:
-
根据文档,每个条件数组必须具有与
X相同的形状。他们是 (3,) 而X是 (3,2)。funclist应该接受 1d 并返回 1d。你的拿一个 2d,然后返回一个 1d。如果X是 1d,则文档和示例最有意义;可能可以使用 2d 输入,但需要非常小心和一些试验才能获得正确的尺寸。 -
您是否注意到
np.piecewiseThe output is the same shape and type as x。那就是地图来自f:R -> R;不能是R^2 -> R。在查看结构化数组产生的值之前,我忽略了该规定。
标签: python numpy valueerror piecewise