我试图绘制通过有限差分获得的值网格。因此,所有示例告诉我如何制作网格输出xx,yy然后将这些输入到f中以生成网格评估f(xx,yy)将不起作用。
如果我要插入网格,就像我在下面的示例中填写的那样,我需要转置我的网格以使其工作。这对我没有任何意义。有人可以解释一下吗?
# Calculations
import itertools
import numpy
x_array = numpy.linspace(0, 1, 5)
y_array = numpy.linspace(0, 3, 20)
num_x = len(x_array)
num_y = len(y_array)
heights = numpy.zeros((num_x, num_y))
for x, y in itertools.product(xrange(num_x), xrange(num_y)):
heights[x, y] = numpy.random.normal() + x + y
# actual usage is a complicated finite difference scheme, so cannot be made explicit in terms of x & y
# Plotting
import matplotlib; matplotlib.use("Qt4Agg")
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
x_mesh, y_mesh = numpy.meshgrid(x_array, y_array)
try:
ax = fig.add_subplot(211)
ax.pcolor(x_mesh, y_mesh, heights)
except ValueError as E:
print "Error:", E
try:
ax = fig.add_subplot(211)
ax.pcolor(x_mesh, y_mesh, heights.T)
ax = fig.add_subplot(212, projection="3d")
ax.plot_surface(x_mesh, y_mesh, heights.T, cmap=matplotlib.cm.coolwarm)
colorbar = matplotlib.cm.ScalarMappable(cmap=matplotlib.cm.coolwarm)
colorbar.set_array(heights)
fig.colorbar(colorbar)
print "No problems, but why should heights be transposed??"
except Exception as E:
print "Error:", E
plt.show()
答案 0 :(得分:0)
所以要清楚,这个有效,但是你在问为什么需要这个转置?
如果你看一下阵列的形状:
In [75]: x_mesh.shape
Out[75]: (20, 5)
In [76]: y_mesh.shape
Out[76]: (20, 5)
In [77]: heights.shape
Out[77]: (5, 20)
很明显,为了在元素方面匹配它们,你需要调整你的高度。
您对数组中哪些方向为x
和y
的概念与matplotlib
的概念相反。可能与行主要冲突和主要冲突有关。