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()
可以同过调整plt.plot的命令参数修改画出来的红点效果
plt.plot(x, y, marker='.',markersize=1, color='red', linestyle='none')
这个可以通过代码检验效果
来源参考这里➡来自知乎链接
'''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