我正在尝试使用给定here的示例来生成我使用的函数的等高线图。我有一个问题,使用numpy.meshgrid这个函数,因为它给了我ValueError: setting an array element with a sequence
。
所以我制作了一个列表,它以这种方式获取矩阵中不同点的值:
n_range = numpy.linspace(1,10,100)
mass_range = numpy.logspace(1,6,100)
mu = []
for n in n_range:
for mass in mass_range:
mu.append(function(n,mass))
n_range, mass_range = numpy.meshgrid(n_range, mass_range)
所以现在mu
有与
mu[100*i + j] = function(n_range[i], mass_range[j])
我现在如何组织另一个将从mu获取值的变量并给出正确的形式,以便我可以根据我创建的numpy.meshgrid
绘制此变量?
首次尝试时,我尝试使用此功能:
def plot_contour_mu():
n_range = np.linspace(1,10,10)
mass_range = np.logspace(1,6,10)
n_range, mass_range = np.meshgrid(n_range, mass_range)
mu = mu0_n_mDM(n_range, mass_range)
但是这导致了上面提到的ValueError,它指向我计算mu0_n_nDM的值,特别是对于该行:
File "mucalc.py", line 109, in mu_0_n_nDM
return C * B * integrate.romberg(integrand,z_min,z_i)
File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadrature.py", line 653, in romberg
ordsum = ordsum + _difftrap(vfunc, interval, n)
File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadrature.py", line 527, in _difftrap
s = sum(function(points),0)
File "/usr/lib/python2.7/dist-packages/scipy/integrate/quadrature.py", line 110, in vfunc
output[0] = y0
答案 0 :(得分:2)
我认为您只需要mu
重新mu=np.array(mu).reshape(100,100)
,然后按plt.contourf(n_range,mass_range,mu.T)
mu=np.array(mu).reshape(100,100)
plt.contourf(n_range,mass_range,mu.T)
plt.colorbar()
答案 1 :(得分:0)
看看3d绘图教程 - http://matplotlib.org/1.3.1/mpl_toolkits/mplot3d/tutorial.html
numpy meshgrid的文档,看看它返回什么类型的对象 - http://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html
你的n_range,mass_range是二维numpy数组。你的亩必须是一样的。这可以通过将n_range和mass_range作为参数传递给函数来实现(假设你的函数可以在numpy数组上运行)。