Python的Max函数自动取整结果?

2024-04-23 13:42:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个非常简单的代码,使用numpy.vectorize将max函数应用于numpy数组的每个元素。我得到的结果很奇怪,因为它们会自动向上取整到下一个整数。代码如下:

np.random.seed(0)
simulss = np.exp(np.cumsum((5/100 - 0.5*0.2**2)*(1/365) + np.random.normal(0,1,(365*5,100000))*0.2*(1/365)**0.5,axis=0))
np.vectorize(lambda x:max(0,x-1))(simulss[-1])

simulss是一个随机数的numpy数组,上面的lambda函数使用max(0,x-1)自动将结果取整。但是,如果我输入max(0,1-x),结果与预期的一样

np.random.seed(0)
simulss = np.exp(np.cumsum((5/100 - 0.5*0.2**2)*(1/365) + np.random.normal(0,1,(365*5,100000))*0.2*(1/365)**0.5,axis=0))
np.vectorize(lambda x:max(0,1-x))(simulss[-1])

我试图找到一个解释,但我真的被卡住了,因为这是一个如此简单的函数,我想不出发生这种情况的原因。我将感谢任何帮助

谢谢


Tags: lambda函数代码numpy元素nprandom数组
1条回答
网友
1楼 · 发布于 2024-04-23 13:42:55

首先,不要做np.vectorize(lambda x:max(0, x-1))。您可以对此使用内置的numpy向量操作:y = np.maximum(0, simulss[-1] - 1)

vectorize与lambda一起使用要比使用numpy中内置的适当功能慢得多


现在,关于您当前的代码,问题只是vectorize操作猜测您的结果数组应该基于第一个结果的数据类型。在第一种情况下,第一个结果是0:整数零。因此,numpy假设您的数据是整数,并相应地创建一个整数数组。在第二种情况下,第一个结果是double,因此numpy会相应地创建一个浮点数组。如果出于某种原因,必须将vectorize与此lambda一起使用,那么解决方案就是将其更改为max(0.0, x-1)-请注意,零现在是一个浮点数

相关问题 更多 >