0

有限差分によって得られた値のグリッドをプロットしようとしています。したがって、メッシュ グリッド出力 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()
4

1 に答える 1

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。行優先と列優先の競合に関連している可能性があります。

于 2013-05-20T14:39:28.280 に答える