gpt4 book ai didi

python - numpy 分段函数声称列表的大小不同

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:57 29 4
gpt4 key购买 nike

我正在尝试编写一个函数来将变量传递给分段函数,我有:

def trans(a):
np.piecewise(a, [(a<.05) & (a>=0),
(a<.1) & (a>= .05),
(a<.2) & (a>=.1),
(a<.4) & (a>=.2),
(a<1) & (a>=.4)],
[0,1,2,3,4])

但是,当我运行 trans(a) 时,我得到:

ValueError: function list and condition list must be the same

我用的function和condition list的长度都是5,不知道是什么问题

编辑:显然 numpy.piecewise 需要一个数组,所以我需要传递一个数组,而不是一个普通变量?

最佳答案

如果 a 是一个 list 而不是 ndarray,你就会得到这个错误:

>>> a = [1,2,7]
>>> np.piecewise(a, [a == 1, a > 1, a > 4], [lambda x: 100*x, lambda x: x**2, lambda x: x])
Traceback (most recent call last):
File "<ipython-input-18-03e300b14962>", line 1, in <module>
np.piecewise(a, [a == 1, a > 1, a > 4], [lambda x: 100*x, lambda x: x**2, lambda x: x])
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 693, in piecewise
"function list and condition list must be the same")
ValueError: function list and condition list must be the same

>>> a = np.array(a)
>>> np.piecewise(a, [a == 1, a > 1, a > 4], [lambda x: 100*x, lambda x: x**2, lambda x: x])
array([100, 4, 7])

发生这种情况是因为如果 a 是一个列表,那么向量比较不会按预期进行:

>>> a = [1,2,7]
>>> [a == 1, a > 1, a > 4]
[False, True, True]

这些行在 np.piecewise

if isscalar(condlist) or \
not (isinstance(condlist[0], list) or
isinstance(condlist[0], ndarray)):
condlist = [condlist]
condlist = [asarray(c, dtype=bool) for c in condlist]

意味着你最终会认为条件列表看起来像

[array([False,  True,  True], dtype=bool)]

这是一个长度为 1 的列表。

[糟糕——我刚刚注意到我的条件并不相互排斥。哦,好吧,无论如何解释发生了什么都没有关系。]

关于python - numpy 分段函数声称列表的大小不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16346075/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com