从Matlab到Python的算法均衡

Rob*_*ist 5 python matlab numpy matplotlib matlab-figure

我已经策划了3 d网在Matlab通过以下小m-file:

[x,n] = meshgrid(0:0.1:20, 1:1:100);

mu = 0;
sigma = sqrt(2)./n;

f = normcdf(x,mu,sigma);

mesh(x,n,f);
Run Code Online (Sandbox Code Playgroud)

我将Python通过以下代码片段利用及其相应的模块获得相同的结果:

import numpy as np
from scipy.integrate import quad
import matplotlib.pyplot as plt

sigma = 1

def integrand(x, n):
    return (n/(2*sigma*np.sqrt(np.pi)))*np.exp(-(n**2*x**2)/(4*sigma**2))

tt = np.linspace(0, 20, 2000)
nn = np.linspace(1, 100, 100)  

T = np.zeros([len(tt), len(nn)])

for i,t in enumerate(tt):
    for j,n in enumerate(nn):
        T[i, j], _ = quad(integrand, -np.inf, t, args=(n,))

x, y = np.mgrid[0:20:0.01, 1:101:1]

plt.pcolormesh(x, y, T)

plt.show()
Run Code Online (Sandbox Code Playgroud)

但是the的输出与那个输出Python有很大不同Matlab,事实上是不可接受的.我害怕错误地使用这些功能linespace,enumerate或者mgrid......

有人有任何想法吗?!...

PS.不幸的是,我无法在此线程中插入输出图......

最好

..............................

编辑:我改变linespacemgrid间隔和更换plot_surface方法...的输出是与合适的精度和平滑性现在3D ...

swe*_*zel 2

据我所知,等效的解决方案是:

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

x, n = np.mgrid[0:20:0.01, 1:100:1]

mu = 0
sigma = np.sqrt(2)/n

f = norm.cdf(x, mu, sigma)

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(x, n, f, rstride=x.shape[0]//20, cstride=x.shape[1]//20, alpha=0.3)

plt.show()
Run Code Online (Sandbox Code Playgroud)

不幸的是,使用 matplotlib 进行 3D 绘图并不像使用 matlab 那样简单。

这是这段代码的情节: 我的代码的 matplotlib 结果