我有一个基本上返回广义谐波数的函数.
def harmonic(limit, z):
return numpy.sum(1.0/numpy.arange(1, limit+1)**z)
Run Code Online (Sandbox Code Playgroud)
以下是当前函数定义的两个示例:
>>> harmonic(1, 1)
1.0
>>> harmonic(2, 1)
1.5
Run Code Online (Sandbox Code Playgroud)
正如您可能猜到的那样,当limit标量时它可以正常工作,但是如何使这个功能也适用于1D和2D数组呢?
以下演示了我想要实现的函数的示例输出
>>> limit = np.array([[1, 2], [3, 4]])
>>> harmonic(limit, 1)
array([[1.0, 1.5], [1.833, 2.083]])
Run Code Online (Sandbox Code Playgroud)
如果您只对矢量化感兴趣,limit而不是z像您展示的示例那样,那么我认为您可以使用np.vectorize:
>>> h = np.vectorize(harmonic)
>>> h(1, 1)
array(1.0)
>>> h(2, 1)
array(1.5)
>>> h([[1,2], [3,4]], 1)
array([[ 1. , 1.5 ],
[ 1.83333333, 2.08333333]])
>>> h([[1,2], [3,4]], 2)
array([[ 1. , 1.25 ],
[ 1.36111111, 1.42361111]])
Run Code Online (Sandbox Code Playgroud)
请注意,这将返回标量情况的0维数组.
实际上,在第二个想法,它也适用于z案件:
>>> h([[2,2], [2,2]], [[1,2],[3,4]])
array([[ 1.5 , 1.25 ],
[ 1.125 , 1.0625]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |