2017-05-17 18 views
0

からsurf3dプロットしようとすると、私は、Pythonに新たなんだと私は2次元配列から3Dサーフェスを作成しようとしているが、それは、私はエラーを得たことが表示されます:ここで2D配列

ValueError: shape mismatch: objects cannot be broadcast to a single shape 

は私がいっぱいですコード

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
import matplotlib.pyplot as plt 
from matplotlib.ticker import LinearLocator, FormatStrFormatter 

def fourier(delX,delT): 
xMax = 10 
tMax = 12 
m = int(xMax/delX) 
n = int(tMax/delT) 
l = 0.020875 
t = 0.0 
Matrix =[[0 for x in range(m+1)]for y in range(n+1)] 
for x in range(n+1): 
Matrix[x][0] = 100 
Matrix[x][5] = 50 

for x in range(n): 
    Matrix[x+1][1] = Matrix[x][1]+l*(Matrix[x][2]-2*Matrix[x][1]+Matrix[x][0]) 
    Matrix[x+1][2] = Matrix[x][2]+l*(Matrix[x][3]-2*Matrix[x][2]+Matrix[x][1]) 
    Matrix[x+1][3] = Matrix[x][3]+l*(Matrix[x][4]-2*Matrix[x][3]+Matrix[x][2]) 
    Matrix[x+1][4] = Matrix[x][4]+l*(Matrix[x][5]-2*Matrix[x][4]+Matrix[x][3]) 

X = np.arange(0,xMax+0.1,delX) 
Y = np.arange(0,tMax+0.1,delT) 

fig = plt.figure() 
ax = fig.gca(projection='3d') 

surf = ax.plot_surface(X,Y,Matrix,cmap=cm.coolwarm,linewidth=0,antialiased=False) 
ax.set_zlim(0,101) 
ax.zaxis.set_major_locator(LinearLocator(10)) 
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) 

fig.colorbar(surf, shrink=0.5, aspect=5) 
plt.show() 

形状がどのように不一致になり、エラーを解決するには?

答えて

0

plot_surface関数では、X、Y、Zが2D配列である必要があります。このため、XとYをmeshgrid関数で1Dから2Dに変換します。

X, Y = np.meshgrid(X, Y) 

完全なコード:

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm 
import matplotlib.pyplot as plt 
from matplotlib.ticker import LinearLocator, FormatStrFormatter 

def fourier(delX,delT): 
    xMax = 10 
    tMax = 12 
    m = int(xMax/delX) 
    n = int(tMax/delT) 
    l = 0.020875 
    t = 0.0 
    Matrix =[[0 for x in range(m+1)]for y in range(n+1)] 
    for x in range(n+1): 
     Matrix[x][0] = 100 
     Matrix[x][5] = 50 

    for x in range(n): 
     Matrix[x+1][1] = Matrix[x][1]+l*(Matrix[x][2]-2*Matrix[x][1]+Matrix[x][0]) 
     Matrix[x+1][2] = Matrix[x][2]+l*(Matrix[x][3]-2*Matrix[x][2]+Matrix[x][1]) 
     Matrix[x+1][3] = Matrix[x][3]+l*(Matrix[x][4]-2*Matrix[x][3]+Matrix[x][2]) 
     Matrix[x+1][4] = Matrix[x][4]+l*(Matrix[x][5]-2*Matrix[x][4]+Matrix[x][3]) 

    X = np.arange(0,xMax+0.1,delX) 
    Y = np.arange(0,tMax+0.1,delT) 

    X, Y = np.meshgrid(X, Y) 
    fig = plt.figure() 
    ax = fig.gca(projection='3d') 

    surf = ax.plot_surface(X,Y,Matrix,cmap=cm.coolwarm,linewidth=0,antialiased=False) 
    ax.set_zlim(0,101) 
    ax.zaxis.set_major_locator(LinearLocator(10)) 
    ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) 

    fig.colorbar(surf, shrink=0.5, aspect=5) 
    plt.show() 

fourier(0.5, 0.5) 

出力:

enter image description here

+0

うわー!ありがとう!より多くの試合のメッシュグリッドを今すぐ学ぶべきである –

+0

私の答えが役に立ったら、正しいものとしてマークしてください – eyllanesc