我一直在使用Matlab几年,这很容易(在我看来)并且在涉及surf
,contour
或contourf
等3D图时非常强大。
对我来说,在Python中做同样的事情似乎更不直观。
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0,100,0.1) # time domain
sp = np.arange(0,50,0.2) # spatial domain
c = 0.5
u0 = np.exp(-(sp-5)**2)
u = np.empty((len(t),len(sp))
for i in range(0,len(t)):
u[i][:] = u0*(sp-c*t)
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
ax.plot_surface(t,sp,u)
plt.show()
所以,在Matlab中,我认为这很容易。 为了获得具有不同尺寸的x和y维度的两个阵列以及为每个网格点赋予值的z矩阵,我需要做什么才能获得3D图(表面或其他)?
由于这是一个基本问题,请随意解释一下,或者只是给我一个答案的链接。不幸的是,我真的不明白到目前为止我读到的关于这个问题的代码中发生了什么。
答案 0 :(得分:1)
我不认为你所写的内容也会在matlab中起作用(我可能错了,我有一段时间没用过它)。
要执行plot_surface(X, Y, Z)
,X, Y, Z
必须是大小相等的二维数组。所以,就像你在matlab中所做的那样:
T, SP = numpy.meshgrid(t, sp)
plot_surface(T, SP, u)