Python 相当于 MATLAB 的 Legendre 函数

标签 python matlab numpy polynomials

目前,我正在尝试使用 Python 分析时间序列数据。作为这样做的指南,我将自己定位在一个 MATLAB 脚本上,该脚本几乎可以完成我想做的所有事情。到目前为止它运行良好,但现在我遇到了该脚本中使用的勒让德多项式。

我尝试了 NumPy implementation的,但我找不到(或多或少)产生与 the MATLAB function 相同结果的方法.

基本上,这就是我想知道的。如何让我的 Python 代码给出与 MATLAB 代码相同的结果?

作为一个小演示,

    k= [0 1 1;1 1 0 ;0 0 1]
    legendre(2,k)

给出:

ans(:,:,1) =

-0.5000    1.0000   -0.5000
0         0         0
3.0000         0    3.0000


ans(:,:,2) =

1.0000    1.0000   -0.5000
     0         0         0
     0         0    3.0000


ans(:,:,3) =

1.0000   -0.5000    1.0000
     0         0         0
     0    3.0000         0

而我的 Python 版本是这样的:我尝试的方式是这样的:

    legendre = np.polynomial.legendre.Legendre([0,1,2])
    legendre(k)

并产生:

   array([[-1.,  3.,  3.],
   [ 3.,  3., -1.],
   [-1., -1.,  3.]])

我看到一些有点奇怪的东西,但不幸的是我不知道如何测试它们,因为这是我第一次听说勒让德多项式这样的东西,NumPy 的文档和维基百科都不是对理解它有很大帮助。

最佳答案

我也遇到了这个问题。以这个问题为起点,提出了以下内容。请注意:我正在像这样使用 MATLAB 函数:

legendre(10,linspace(-1,1,10))

而且我需要在 Python 中生成等效项。这是代码:

import numpy as np
from scipy import special as sp

def legendre(N,X) :
    matrixReturn = np.zeros((N+1,X.shape[0]))
    for i in enumerate(X) :
        currValues = sp.lpmn(N,N,i[1])
        matrixReturn[:,i[0]] = np.array([j[N] for j in currValues[0]])
    return matrixReturn

我是 Python 的新手,所以我确信以上内容可以改进。

关于Python 相当于 MATLAB 的 Legendre 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27061206/

相关文章:

python - 在预先排序的 DataFrame 上使用 pandas groupby 的迭代顺序

arrays - 对非索引变量使用计数器并将它们放入数组中

python - twitter api 转发排除

python - 以相反顺序打印队列中的小组数据

r - 借助 matlab 教程将 matlab 工具箱转换为 R 脚本以进行光谱分析

python - 在 Numpy 中向量化 for 循环

python - 如何将 numpy 2D 数组广播到 6D 数组

python - 从包含字符串和 float 的 pandas 列中删除科学记数法

python - Python 中的 COM 对象(arcobjects)

matlab - matlab中无for循环的行列矩阵乘法