我正在使用SHTOOLS包中的PLegendre函数。它返回特定参数的Legendre多项式数组。PLegendre(lmax,x)返回Legendre多项式的数组P_0(x)到P_lmax(x)。它是这样工作的:
In [1]: from pyshtools import PLegendre
loading shtools documentation
In [2]: import numpy as np
In [3]: PLegendre(3,0.5)
Out[3]: array([ 1. , 0.5 , -0.125 , -0.4375])
我想传递一个数组作为参数,所以我使用frompyfunc。在
^{pr2}$输出是一个数组。我知道可以通过对数组进行切片来创建元素数组。在
In [6]: a=legendre(3,np.linspace(0,1,4))
In [7]: array([a[i][:] for i in xrange(4)])
Out[7]:
array([[ 1. , 0. , -0.5 , -0. ],
[ 1. , 0.33333333, -0.33333333, -0.40740741],
[ 1. , 0.66666667, 0.16666667, -0.25925926],
[ 1. , 1. , 1. , 1. ]])
但是。。有没有一种方法可以直接做到这一点,而不必对数组进行切片?在
np.frompyfunc
已编译,因此我必须深入研究源代码以查看它到底在做什么。但它似乎假定func输出是一个(难以理解的)Python对象。在这两个函数产生相同的输出,尽管
^{pr2}$foo1
更快。在生成大小不同的数组
其中as
foo1(np.ones((4,))
都是相同的,理论上可以叠加。在在循环期间或之后,不会尝试测试对象是否是数组(或列表)以及它们是否可以组合成一个高维数组。在
使用
plonser's
是个好主意。事实上,frompyfunc
加vstack
比更常见的列表理解加vstack
快。在我认为它不能像前面已经指出的那样,直接做,在{}的情况下,它做了几乎相同的事情。请注意,使用
np.frompyfunc
,您的代码不会比普通的for
循环快。。。代码只是看起来更好。在但是,您可以使用
np.vstack
代替列表理解相关问题 更多 >
编程相关推荐