这里的统计学家试图弄清楚NumPy是如何在飞行中工作的。我需要使用SciPy的rv_discrete
实现一些东西,但是我得到了一些错误,这些错误可以追溯到NumPy中的以下行为。这可能是超基本的,但我很困惑。你知道吗
我试图理解为什么下面的简单代码不起作用:
import numpy as np
def testfn(k):
if k == 1:
return 1
else:
return 1/k**2
def sumtest(k):
m = np.arange(1,k+1)
print(np.sum(testfn(m),axis=0))
sumtest(100)
如果我简单地去掉testfn()
中的条件语句并用return 1/k**2
替换它,那么一切都很好。我可以凭直觉判断这是因为在sumtest()
内部,我正在将一个ndarray对象传递给testfn()
,但当这种情况发生时,我无法理解引擎盖下发生了什么。你知道吗
我问这个问题的原因是,这就是在SciPy的rv_discrete
类中_cdfsingle()
是如何编码的,我需要知道如何定义新的随机变量。你知道吗
如果这是太基本,那么我会很感激一个链接到某个地方开始。任何帮助都将不胜感激。你知道吗
编辑:根据下面的评论,让我澄清我想要发生什么。我基本上希望testfn()
在传递给它的数组上按组件方式运行。因此,如果[1,2,3]
是传递给testfn()
的数组,那么在一天结束时,我希望np.sum
返回数量1 + 1/4 + 1/9
。你知道吗
Numpy.sum()
需要像这样的数组作为其第一个参数。因此,您需要testfn()
返回一个数组。你知道吗似乎您认为
Numpy.sum()
会在对每个输入求和之前对testfn()
求值。事实并非如此。如果要将testfn()
映射到m
,您可能会得到所需的行为。你知道吗所以试试看:
编辑:
大多数
numpy
函数在数组上按元素运行。你想要的功能可以通过几种方式来实现。最简单的方法可能是将testfn(k)
更改为以下内容:现在您将始终获得从
testfn
返回的数组,并且您可以对该数组中的值进行细粒度控制。你知道吗相关问题 更多 >
编程相关推荐