python画3D曲面图

python画3D曲面图

  • 过程理解
    • 参考程序
    • 理解过程
    • 坐标点画网格
    • python.np的命令集

过程理解

参考程序

import numpy as np
import plotly.graph_objs as go
import matplotlib.pyplot as plt

def f(x, y):
    frerate=(0.8*(y-300)-0.5*(y-800))/500      
    z = minf+(maxf-minf)*frerate
    return z

def fig():
    a = np.linspace(start=300, stop=800, num=50,dtype=np.int32)
                 #开始值300,结束值800,生成50个数字
    b = np.linspace(start=50, stop=300,num=50,dtype=np.int32)
    print(a)
    print(b)
    x, y = np.meshgrid(a, b)
    print(x)
    print(y)
    mesh(x, y)

    z = f(x, y)
    print(z)
 
    fig = go.Figure(data=[go.Surface(x=x, y=y, z=z)])
 
    fig.update_layout(
        title_text='3D',
        height=800,
        width=800,
        autosize=False,
        margin=dict(l=65, r=50, b=65, t=90)
    )
 
    fig.show()

# 观察通过meshgrid形成的x-y坐标轴数据点
def mesh(x, y):
    plt.xlabel('x axis')
    plt.ylabel('y axis')
    plt.plot(x, y, marker='.',markersize=1, color='red', linestyle='none')
    plt.grid()
    plt.show()
 
 
if __name__ == '__main__':
    fig()

理解过程

numpy.meshgrid()理解 参考这个文章

一句话解释numpy.meshgrid()——生成网格点坐标矩阵。
关键词:网格点,坐标矩阵

坐标点画网格

将对应的X,Y坐标点化成网格

def mesh(x, y):
    plt.xlabel('x axis')
    plt.ylabel('y axis')
    plt.plot(x, y, marker='.',markersize=1, color='red', linestyle='none')
    plt.grid()
    plt.show()
 

效果如下:
python画3D曲面图_第1张图片

可以同过调整plt.plot的命令参数修改画出来的红点效果

plt.plot(x, y, marker='.',markersize=1, color='red', linestyle='none')

这个可以通过代码检验效果

python.np的命令集

来源参考这里➡来自知乎链接

'''Numpy库吐血大整理'''

import numpy as np

#一维数组(newaxis可以行转列)
d=np.arange(1,10,1)
#开始值1,结束值9,步长是1的一维数组
e=np.linspace(1,12,num=5,endpoint=True,retstep=True)#等差数列
#开始值1,结束值12,生成5个数字,包含结束值(默认为True),返回步长
f=np.logspace(1,10,num=10,endpoint=True,base=2)#等比数列
#开始值2的1次方,结束值2的10次方,生成10个数字,包含结束值,底数为2

#二维数组
a=np.zeros((3,4))
#3行4列全是0
b=np.ones((3,4))
#3行4列全是1
c=np.full((3,4),2.0)
#3行4列全是2
g=np.identity(3)
#3行3列,对角线是1,其他全是0

#数组的连接和分割
print(np.concatenate((a,b),axis=0))
#连接a,b俩数组沿着0轴方向,默认为0轴
print(np.vstack((a,b)))
#连接a,b俩数组沿着0轴方向,1轴元素个数必须相同
print(np.hstack((a,b)))
#连接a,b俩数组沿着1轴方向,0轴元素个数必须相同
print(np.split(a,3,axis=0))
#沿着0轴方向切割a数组将其分为3个二维数组,结果为列表,默认沿着0轴
print(np.vsplit(a,3))
#沿着0轴方向切割a数组将其分为3个二维数组,结果为列表
print(np.hsplit(a,4))
#沿着1轴方向切割a数组将其分为4个二维数组,结果为列表

#random模块
print(np.random.rand(5,2))
#5行2列的数组,元素是大于等于0小于1的浮点数
print(np.random.randn(5,2))
#5行2列的数组,元素是标准正态分布随机数(平均值0,标准差1)
print(np.random.randint(low=0,high=100,size=5))
#一个列表,有5个大于等于1小于100的整数
print(np.random.normal(loc=10,scale=2,size=5))
#一个列表,有5个平均值是10标准差是2的正态分布随机数

#排序
x=np.array([[3,1,4],
   [2,5,3],
   [1,8,3]])
print(np.sort(x,axis=-1))
#沿着最后一个轴(即1轴)对x数组内元素进行从小到大排序
print(np.argsort(x,axis=-1))
#沿着最后一个轴(即1轴)对x数组内元素进行从小到大排序,展示的结果是元素的索引



#聚合函数(nan可以排除null和异常值)
print(np.sum(x))
#求各元素之和
print(np.cumsum(x,axis=0))
#按照0轴依次累加,也就是从上往下累加
print(np.cumsum(x,axis=1))
#按照1轴依次累加,也就是从左往右累加
print(np.cumprod(x,axis=1))
#从左往右累乘
print(np.cumprod(x,axis=0))
#从上往下累乘
print(np.amax(x))
#求元素中的最大值
print(np.amin(x))
#求元素中的最小值
print(np.mean(x))
#求元素的平均值
print(np.average(x,axis=None,weights=None))
#weights表示权重,它的值要和原数组格式一样,里面各个元素之和等于1

#保存
np.save('SE.npy',x,allow_pickle=True,fix_imports=True)
#allow_pickle表示十分允许使用PICKLE保存数组对象,fix_imports表示十分允许PY2读取3的数据
np.savez('NPZ.npz')

#读取
np.load('NPZ.npz',mmap_mode=None,allow_pickle=True,fix_imports=True)


#数组的广播原理
1,如果两个数组维度数不一样,那么小的数组会补齐维度
比如[1,2,3]+5,会广播成[1,2,3]+[5,5,5]
2,如果两个数组只有一个维度一样,那么小的数组会按照大的数组补齐维度
3,如果两个数组形状在任何一个维度都不一样且没有一个维度是1,就报错

1

你可能感兴趣的:(python学习,python,3d,开发语言)