2017-05-17 1 views
0

내가 파이썬에 새로운 그리고 난 2 차원 배열에서 3D 표면을 만들기 위해 노력하고있어에서 surf3d 플롯하려고하지만, 내가 오류가있어 나타납니다 :는 2 차원 배열

여기
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 배열이어야합니다.이 경우 meshgrid 함수를 사용하여 X와 Y를 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

와우! 고마워! 더 많은 사게 meshgrid을 지금 배워야한다 –

+0

나의 대답이 도움이된다면, 그것을 올바른 것으로 표시 해주세요. – eyllanesc