python科学计算方向_python 科学计算与可视化

本文介绍了Python科学计算库Numpy的使用,包括创建数组、查看数组属性、创建随机数组等功能,并详细讲解了如何利用Matplotlib进行散点图、柱状图、等高图和3D图的绘制,以及实现雷达图和手绘效果。通过实例展示了Python在科学计算和数据可视化的强大能力。
摘要由CSDN通过智能技术生成

一、Numpy 库

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

引用:

import numpy as np

Numpy简单创建数组:

importnumpy as np#创建简单的列表

a = [1, 2, 3, 4]#将列表转换为数组

b = np.array

(a)

Numpy查看数组属性:

数组元素个数:

b.size

数组形状:

b.shape

数组维度:

b.ndim

数组元素类型:

b.dtype

快速创建N维数组的api函数:

(1)创建10行10列的数值为浮点1的矩阵:

array_one = np.ones([10, 10])

(2)创建10行10列的数值为浮点0的矩阵:

array_zero = np.zeros([10, 10])

Numpy创建随机数组np.random

均匀分布

np.random.rand(10, 10)创建指定形状(示例为10行10列)的数组(范围在0至1之间)

np.random.uniform(0, 100)创建指定范围内的一个数

np.random.randint(0, 100) 创建指定范围内的一个整数

正态分布

给定均值/标准差/维度的正态分布np.random.normal(1.75, 0.1, (2, 3)

NumPy 创建数组

ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建。

numpy.empty

numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:

numpy.empty(shape,dtype =float,order ='C')

参数说明:

参数描述

shape

数组形状

dtype

数据类型,可选

order

有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。

numpy.zeros

创建指定大小的数组,数组元素以 0 来填充:

numpy.zeros(shape,dtype =float,order ='C')

参数说明:

参数描述

shape

数组形状

dtype

数据类型,可选

order

'C' 用于 C 的行数组,或者 'F' 用于 FORTRAN 的列数组

numpy.ones

创建指定形状的数组,数组元素以 1 来填充:

numpy.ones(shape,dtype =None,order ='C')

NumPy 从已有的数组创建数组

numpy.asarray

numpy.asarray 类似 numpy.array,但 numpy.asarray 只有三个,比 numpy.array 少两个。

numpy.asarray(a,dtype =None,order =None)

参数说明:

参数描述

a

任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组

dtype

数据类型,可选

order

可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。

numpy.frombuffer

numpy.frombuffer 用于实现动态数组。

numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。

numpy.frombuffer(buffer,dtype =float,count =-1,offset =0)

注意:buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。

参数说明:

参数描述

buffer

可以是任意对象,会以流的形式读入。

dtype

返回数组的数据类型,可选

count

读取的数据数量,默认为-1,读取所有数据。

offset

读取的起始位置,默认为0。

numpy.fromiter

numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。

numpy.fromiter(iterable,dtype,count=-1)

参数描述

iterable

可迭代对象

dtype

返回数组的数据类型

count

读取的数据数量,默认为-1,读取所有数据

二、matplotlib库

matplotlib是python上的一个2D绘图库,它可以在夸平台上边出很多高质量的图像。综旨就是让简单的事变得更简单,让复杂的事变得可能。我们可以用matplotlib生成 绘图、直方图、功率谱、柱状图、误差图、散点图等 。

引用:

import matplotlib.pyplot as plt

散点图:

plt.scatter(X, Y, s=75, c=T, alpha=.5)

其中X,Y分别为横纵坐标;s为点的大小(optional);c为颜色设置(optional);alpha为透明度设置(optional),是一个小于等于1的值

图片附加信息:

plt.xlim((-1, 1)) #设置x轴范围为(-1,1)

plt.ylim((-1, 1)) #设置y轴范围为(-1,1)

plt.legend() #显示图例

plt.show() #显示绘图

柱状图:

x = np.arange(10)

y= 2**x + 10plt.bar(x,y,facecolor='#9999ff',edgecolor='white')#柱颜色,柱边框颜色

for x,y in zip(x,y):#zip指把x,y结合为一个整体,一次可以读取一个x和一个y

plt.text(x,y,'%.2f' % y,ha='center',va='bottom')#指字体在中间和柱最顶的顶部

plt.show()

等高图:

deff(x,y):#用来生成高度

return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

x= np.linspace(-3,3,100)

y= np.linspace(-3,3,100)

X,Y= np.meshgrid(x,y)#将x,y指传入网格中

plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)#8指图中的8+1根线,绘制等温线,其中cmap指颜色

C= plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=.5)#colors指等高线颜色

plt.clabel(C,inline=True,fontsize=10)#inline=True指字体在等高线中

plt.xticks(())

plt.yticks(())

plt.show()

matplotlib绘制3D图:

from mpl_toolkits.mplot3d import Axes3D#动态图所需要的包

fig=plt.figure()

ax=Axes3D(fig)

x= np.arange(-4,4,0.25)#0.25指-4至4间隔为0.25

y= np.arange(-4,4,0.25)

X,Y= np.meshgrid(x,y)#x,y放入网格

R= np.sqrt(X**2 + Y**2)

Z=np.sin(R)

ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))#rstride=1指x方向和y方向的色块大小

ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap='rainbow')#zdir指映射到z方向,-2代表映射到了z=-2

ax.set_zlim(-2,-2)

plt.show()

子图像:

plt.figure()

plt.subplot(2,2,1)#建立一个两行两列的画布,第一个

plt.plot([0,1],[0,1])

plt.subplot(2,2,2)#第二个

plt.plot([0,1],[0,1])

plt.subplot(2,2,3)#第三个

plt.plot([0,1],[0,1])

plt.subplot(2,2,4)#第四个

plt.plot([0,1],[0,1])

plt.show()

动态图:

from matplotlib import animation#动态图所需要的包

fig,ax= plt.subplots()#子图像

x= np.arange(0,2*np.pi,0.01)

line,=ax.plot(x,np.sin(x))defanimate(i):

line.set_ydata(np.sin(x+i/10))#用来改变的y对应的值

returnline,definit():

line.set_ydata(np.sin(x))#动态图初始图像

returnline,

ani= animation.FuncAnimation(fig=fig,func=animate,init_func=init,interval=20)#动态作图的方法,func动态图函数,init_func初始化函数,interval指图像改变的时间间隔

plt.show()

三、雷达图

python123 的成绩雷达图:

import numpy asnp

import matplotlib.pyplotasplt

import matplotlib

matplotlib.rcParams['font.family']='SimHei'matplotlib.rcParams['font.sans-serif'] = ['SimHei']

labels= np.array(['第二周', '第三周', '第四周', '第五周', '第六周'])

nAttr= 5data= np.array([90, 90, 100, 100, 90]) #数据值

angles= np.linspace(0, 2*np.pi, nAttr, endpoint=False)

data= np.concatenate((data, [data[0]]))

angles= np.concatenate((angles, [angles[0]]))

fig= plt.figure(facecolor="white")

plt.subplot(111, polar=True)

plt.plot(angles,data,'bo-',color ='g',linewidth=2)

plt.fill(angles,data,facecolor='g',alpha=0.25)

plt.thetagrids(angles*180/np.pi, labels)

plt.figtext(0.52, 0.95, '广师小帅强的成绩雷达图', ha='center')

plt.grid(True)

plt.show()

运行程序结果如图:

四、手绘效果

#e17.1HandDrawPic.pyfromPIL import Image

import numpyasnp

vec_el= np.pi/2.2# 光源的俯视角度,弧度值

vec_az= np.pi/4. # 光源的方位角度,弧度值

depth= 10. # (0-100)

im= Image.open('C:\\Users\\Administrator\\Desktop\\timg.jpg').convert('L')

a= np.asarray(im).astype('float')

grad=np.gradient(a) #取图像灰度的梯度值

grad_x, grad_y=grad #分别取横纵图像梯度值

grad_x= grad_x*depth/100.

grad_y= grad_y*depth/100.

dx= np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响

dy= np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响

dz=np.sin(vec_el) #光源对z 轴的影响

A= np.sqrt(grad_x**2 + grad_y**2 + 1.)

uni_x= grad_x/A

uni_y= grad_y/A

uni_z= 1./A

a2= 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化

a2= a2.clip(0,255)

im2= Image.fromarray(a2.astype('uint8')) #重构图像

im2.save('fcityHandDraw.jpg')

原图:                                                                                                                                                                手绘效果:

                                                                           

五、数学规律图

绘制sigmoid函数:

import matplotlib.pyplot asplt

import numpyasnp

def sigmoid(x):

# 直接返回sigmoid函数return 1. / (1. + np.exp(-x))

def plot_sigmoid():

# param:起点,终点,间距

x= np.arange(-8, 8, 0.2)

y=sigmoid(x)

plt.plot(x, y)

plt.show()if __name__ == '__main__':

plot_sigmoid()

结果如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值