我正在编写一个非常简单的代码,使用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])
我试图找到一个解释,但我真的被卡住了,因为这是一个如此简单的函数,我想不出发生这种情况的原因。我将感谢任何帮助
谢谢
首先,不要做
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)
-请注意,零现在是一个浮点数相关问题 更多 >
编程相关推荐