1. np.mgrid的简单理解和使用
-
np.mgrid[start: end: step]
参数解析:start:开始坐标
stop:结束坐标(实数不包括,复数包括)
step:步长(实数代表间隔,复数代表取多少个点,如3j就是取3个点)
-
2D下,(x,y),x的取值变为一列,然后向右拓展长度为len(y);y的取值变为一行,向下拓展长度为len(x);
-
3D也类似,主要是无法形容,具体看代码展示;
-
注意:mgrid中的k,b,ErrorArry分别对应x,y,z轴!
1维
# 1D矩阵
x = np.mgrid[1:3:1]
print("步长为实数1:{0},长度:{1}".format(x,len(x)))
y = np.mgrid[1:3:1j]
print("步长为复数1j:{0},长度:{1}".format(y,len(y)))
z = np.mgrid[1:3:3j]
print("步长为复数3j:{0},长度:{1}".format(z,len(z)))
m = np.mgrid[1:3:6j]
print("步长为复数6j:{0},长度:{1}".format(m,len(m)))
2维
# 2D矩阵
x = np.mgrid[1:3:1,4:6:1]
print("1.步长为实数1,1:\n{0},\n维度:{1}\n\n".format(x,np.array(x).shape))
y = np.mgrid[1:3:3j,4:6:1]
print("2.步长为复数3j,1:\n{0},\n维度:{1}\n\n".format(y,np.array(y).shape))
z = np.mgrid[1:3:3j,4:6:3j]
print("3.步长为复数3j,3j:\n{0},维度:{1}".format(z,np.array(z).shape))
3维
- 3D 修改j前的数值观察变化
改x就改变每一个区间出现的次数
改y就改变每一个区间的行数
改z就改变列数
大概就是这个样子
# 3D矩阵
x = np.mgrid[1:3:3j,4:6:3j,7:9:3j]
print(x,"\n维度:",np.array(x).shape)
参考链接:https://blog.csdn.net/abc13526222160/article/details/88559162
2. 在三维上绘制图形
详情请看链接!!!写的是真不错!!!
https://blog.csdn.net/u014636245/article/details/82799573
- 主要是讲述了如何再python中创建三维坐标轴对象Axes3D
- 使用mpl_toolkits.mplot3d导入对象Axes3D来实现
# 使用Axes3D建立三维坐标,然后使用matplotlib绘制三维曲面
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
import pylab as p
import mpl_toolkits.mplot3d.axes3d as p3
k,b=np.mgrid[1:3:3j,4:6:3j]
f_kb=3*k**2+2*b+1
fig = p.figure()
ax=p3.Axes3D(fig)
ax.plot_surface(k,b,f_kb,rstride=1,cstride=1)
ax.set_xlabel('k')
ax.set_ylabel('b')
ax.set_zlabel('ErrorArray')
p.show()
- 使用关键字projection='3d’参数生成
# 直接使用matplotlib绘制三维曲面,需要用到projection='3d'参数
import matplotlib.pyplot as plt
k,b = np.mgrid[1:3:3j,4:6:3j]
f_kb = 3*k**2+2*b+1
ax = plt.axes(projection='3d')
# ax = plt.subplot(111,projection='3d')
# rstride与cstride是渲染步长,可以得到清晰细腻的图像,越小越精细,但受到绘制前矩阵维度的限制
ax.plot_surface(k,b,f_kb,rstride=1,cstride=1,cmap='rainbow')
ax.set_xlabel('k')
ax.set_ylabel('b')
ax.set_zlabel('ErrorArray')
p.show()