使用np.piecewise时报ValueError布尔数组索引赋值长度不匹配问题
报错原因分析
- 核心是
np.piecewise的使用不符合规范:该函数的第三个参数(分段取值/函数列表)中,若需要对对应分段的输入做动态计算,需传入可调用函数,不能直接传入全量数组预计算的结果。 - 你代码中第二个分段直接传入了
(r/2)*(3 - (r**2)),这是基于长度为100的全量r数组计算得到的100个值的数组,但第二个匹配条件r > 1仅能匹配到90个元素,将100个值赋值给90个位置自然触发维度不匹配的报错。
修复方法
将第二个分段的计算逻辑改为lambda函数,同时调整匹配条件覆盖r=1的边界场景,避免潜在的未匹配点问题,修改后的赋值代码如下:
V = np.piecewise(r, [r < 1, r >= 1 ], [1, lambda x: (x/2)*(3 - (x**2))])
这里lambda接收的入参x是每个匹配条件筛选出的局部元素,计算得到的结果长度和匹配到的元素个数完全一致,即可解决维度不匹配的报错。
内容的提问来源于stack exchange,提问作者Antonia Farina
相关产品推荐
相关产品推荐

