Numpy arange over Numpy数组

2024-05-27 12:59:01 发布

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

我有一个基本上返回generalized harmonic number的函数。在

def harmonic(limit, z):
   return numpy.sum(1.0/numpy.arange(1, limit+1)**z)

以下是当前函数定义的两个示例:

^{pr2}$

limit是标量时,您可能会猜到这一点很好,但是我如何使这个函数同时处理1D和2D数组呢?在

下面演示了我要实现的函数的输出示例

>>> limit = np.array([[1, 2], [3, 4]])
>>> harmonic(limit, 1)
array([[1.0, 1.5], [1.833, 2.083]])

Tags: 函数numpy示例numberreturn定义defarray
2条回答

在您的示例中,arange[1,limit+1]范围内生成等间距的1D数组。在

现在假设你想要一个均匀分布的多维数组。然后可以使用^{}生成2D数组的每个组件。将arange的结果转换为一个带有list()的python列表,使其成为ndarray构造函数的参数的正确格式。在

这取决于你的目的。当你处理数学的时候。分析,您需要的可能是网格:

>>> np.mgrid[0:5,0:5]
array([[[0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2],
        [3, 3, 3, 3, 3],
        [4, 4, 4, 4, 4]],
       [[0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4]]])

More here.

编辑: 发布代码后: 正如DSM所提到的,np.vectorize是一个很好的方法。From doc

^{pr2}$

Generalized function class.

Define a vectorized function which takes a nested sequence of objects or numpy arrays as inputs and returns a numpy array as output. The vectorized function evaluates pyfunc over successive tuples of the input arrays like the python map function, except it uses the broadcasting rules of numpy.

如果您只对limit上的矢量化感兴趣,而不是{},如您所示,那么我认为您可以使用^{}

>>> 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]])

注意,对于标量情况,这将返回0维数组。在

实际上,仔细想想,它也应该适用于z的情况:

^{pr2}$

相关问题 更多 >