4

SHTOOLS パッケージの PLegendre 関数を使用しています。特定の引数のルジャンドル多項式の配列を返します。PLegendre(lmax,x) は、ルジャンドル多項式 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 を使っています。

In [4]: legendre=np.frompyfunc(PLegendre,2,1)

In [5]: legendre(3,np.linspace(0,1,4))
Out[5]: 
array([array([ 1. ,  0. , -0.5, -0. ]),
   array([ 1.        ,  0.33333333, -0.33333333, -0.40740741]),
   array([ 1.        ,  0.66666667,  0.16666667, -0.25925926]),
   array([ 1.,  1.,  1.,  1.])], dtype=object)

出力は配列の配列です。配列をスライスすることで、これから要素の配列を作成できることを理解しています。

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

しかし..配列の配列をスライスする代わりに、これに直接到達する方法はありますか?

4

2 に答える 2

3

ほぼ同じことをする場合は、すでにここで指摘したように、直接行うことはできないと思います。np.vectorizeコードは通常のforループよりも高速ではないことに注意してくださいnp.frompyfunc...コードは見た目が良くなるだけです。

ただし、できることはnp.vstack、リスト内包表記の代わりに使用することです

a = legendre(3,np.linspace(0,1,4))
np.vstack(a)
于 2015-04-17T08:12:53.047 に答える