目录
1.numpy
1.什么是numpy?
2.numpy中常见数据类型
3.创建numpy数组
4.numpy数组的属性
5.数组的运算
6.numpy轴
7.numpy读取本地数据
8.numpy的转置
9.numpy的索引和切片
10.数组的拼接和分割
11.数组行列的交换
12.numpy中的nan和inf
13.numpy中的统计方法
1.numpy 1.什么是numpy?
numpy是一个在python中做科学计算的基础库,支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机器学习框架的基础库!
2.numpy中常见数据类型3.创建numpy数组
import numpy as np #使用numpy生成数组,得到ndarray的类型 t1 = np.array([1,2,3,]) print(t1) print(type(t1))
可以观察到numpy中数组类型名称为ndarray,这是numpy中最重要的对象。
在生成顺序序列时,可以使用python自带的range(),也可以使用numpy自带的arrange()。
t2 = np.array(range(4,10,2)) print(t2) print(type(t2)) t3 = np.arange(4,10,2) print(t3) print(type(t3))
指定数据数据类型
t4 = np.array(range(1,4),dtype=float) print(t4) print(t4.dtype)
调制数据类型
#调整数据类型 t5 = t4.astype("int8") print(t5) print(t5.dtype)
使用numpy创建随机数数组时,可以使用numpy自带的random(),也可以使用random()第三方库。
import numpy as np import random #numpy中的小数 t7 = np.array([random.random() for i in range(10)]) print(t7) print(t7.dtype) t8 = np.round(t7,2) print(t8) print(t8.dtype) t9=np.random.rand(10) print(t9) print(t9.dtype)
利用numpy.ones和numpy.zeros可以生成全一和全零的数组。
#生成全一或者全零数组 t1 = np.ones(10) print(t1) t2= np.zeros(10) print(t2)4.numpy数组的属性
numpy.shape()会返回该数组维度的一个元组。
a1=np.array((1,2,3)) print (a1.shape) a2 = np.array([[1,2,3],[4,5,6]]) print (a2.shape)
numpy.reshape()可以改变数组的维数。
a2 = np.array([[1,2,3],[4,5,6]]) print(a2) print (a2.shape) a2=a2.reshape(3,2) print(a2) print (a2.shape) a2=a2.reshape(6) print(a2) print (a2.shape)5.数组的运算
numpy中可以进行数组和数的运算以及数组和数组的运算。
在进行数组和数的运算时,该数会和数组中每一个元素进行对应的计算。
a2 = np.array([[1,2,3],[4,5,6]]) print(a2) a3=a2+5 print(a3) a4=a2*2 print(a4)
在进行数组之间的运算时,如果两个数组维度一样,则每一个数对应做相关运算。
a2 = np.array([[1,2,3],[4,5,6]]) print(a2) a3 = np.array([[2,2,2],[5,5,5]]) print(a3) a4=a2+a3 print(a4)
当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制
a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) b = np.array([1,2,3]) print(a.shape) print(b.shape) print(a - b)
a为4行3列的一个矩阵,b为1行3列矩阵,都为三列,尽管维度不同但仍可以计算。具体计算过程为a的每一行减去b。
同理,维数为(3,3,3)的数组不可以和维数为(3,2)的数组进行运算,但维数为(3,3,2)的数组可以和维数为(3,2)的数组进行运算。
6.numpy轴在一维数组中,只有axis0轴。
在二维数组中,轴的方向是分为行方向和列方向。0轴是沿着列的方向走,1轴是沿着行的方向走。
a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) print(a) print(np.sum(a,axis=0)) print(np.sum(a,axis=1))
观察输出结果可以发现,在指定axis等于0求和时,结果是每一列上元素的和;在指定axis等于1求和时,结果是每一行上元素的和。
7.numpy读取本地数据使用numpy读取本地csv数据时,可以使用np.loadtxt()函数。
#设置文件路径 us_file_path = "./youtube_video_data/US_video_data_numbers.csv" uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv" #csv文件中以逗号为分隔 t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True) t2 = np.loadtxt(us_file_path,delimiter=",") print(t1) print("*"*100) print(t2)
t1=np.arange(6).reshape(2,3) print(t1) print(t1.transpose()) print(t1.swapaxes(1,0)) print(t1.T)
观察输出,如果不指定dbyte类型,输出会默认采用科学计数法。设置unpack=ture会对矩阵进行转置。
8.numpy的转置对numpy中的数组进行转置时,可以使用多种方法。
1.transpose()函数。
2.swapaxes()函数。
3. .T方法。
t1=np.arange(6).reshape(2,3) print(t1) print(t1.transpose()) print(t1.swapaxes(1,0)) print(t1.T)9.numpy的索引和切片
一维数组很简单,基本和列表一致。
对于二维数组,可以取其中一行,或者从某一行开始取,也可以指定取哪几行。
t1=np.arange(6).reshape(3,2) print(t1) #取1行 print(t1[2]) #从第一行开始取 print(t1[1:]) #取1 2行 print(t1[[0,1]])
取列时,只需要在,:指定列的参数即可。
t1=np.arange(9).reshape(3,3) print(t1) #取第3列 print(t1[:,2]) #从第2列开始取 print(t1[:,1:]) #取1 2列 print(t1[:,[0,1]])
取多行多列则需要同时指定行和列的参数。
t1=np.arange(9).reshape(3,3) print(t1) #取第3行第3列 print(t1[2:,2]) #从第二行第2列开始取 print(t1[1:,1:]) #取1 2行1 2列 t2 = t1[[0,1]] #先取出想要的行数据 t2 = t2[:,[0,1]] #再取出要求的列数据 print(t2)
ps:在需要取某几行某几列时,必须分两步执行,先取行数据,后取列数据,不能直接进行,否则得到的结果是交叉出的元素。
print(t1[[0,1],[0,1]])
输出结果为第1行和第一列交叉元素,第二行和第二列交叉元素。
10.数组的拼接和分割进行数组的拼接时,有两种方法,vstack()进行垂直拼接;hstack()进行水平拼接。
t1=np.arange(9).reshape(3,3) t2=np.ones((3,3)) print(np.vstack((t1,t2))) print(np.hstack((t1,t2)))
在进行数组的分割时,可以使用np.split()函数,也可以利用np.hsplit()进行垂直方向的分割,利用np.vsplit()进行水平方向的分割。
t1=np.arange(16).reshape(4,4) print(np.split(t1,2,axis=0)) print(np.split(t1,2,axis=1))
t1=np.arange(16).reshape(4,4) print(np.hsplit(t1,2)) print(np.vsplit(t1,2))
在使用np.split()时,设置axis=0进行的是水平方向的分割,设置axis=1进行的是垂直方向的分割。
11.数组行列的交换可以通过调整数组的行列位置来达到交换行列的目的。
t1=np.arange(9).reshape(3,3) print(t1) #交换2 3行 t1[[1,2],:]=t1[[2,1],:] print(t1) #交换 2 3列 t1[:,[1,2]]=t1[:,[2,1]] print(t1)12.numpy中的nan和inf
nan(not of a number),当我们读取本地的文件为float时,如果有缺失,就会出现nan;或者当我们做了一个不合适的计算时,比如无穷大减去无穷大,也可能会出现nan。
nan和任何值做计算,结果都是nan。
两个nan是不相等的。
print(np.nan==np.nan)
inf(infinity)表示无穷大,-inf表示负无穷,比如一个数除以0,就会出现inf。
13.numpy中的统计方法t1=np.arange(9).reshape(3,3) print(np.sum(t1)) print(np.max(t1)) print(np.mean(t1)) print(np.median(t1)) print(np.ptp(t1)) print(np.std(t1))
参考网站 机器学习三剑客之Numpy - 简书 (jianshu.com)
Python之Numpy详细教程_a373595475的博客-CSDN博客_numpy
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)