Numpy官网手册中文翻译(引用)Numpy常用函数总结表格(引用)一、什么是numpy
一个Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于在大型、多维数组上执行数值运算。
二、numpy的基本操作
1、创建数组
函数 | 功能 |
np.zeros((3,4)) | 创建一个3行4列全0的数组 |
np.ones((3,4)) | 创建一个3行4列的全1的数组 |
np.eye(3) | 创建一个3行3列的对角线为1的方阵 |
np.empty([2, 2], dtype=int) | 根据给定的维度和数值类型返回一个新的数组,其元素不进行初始化 |
np.linspace(2.0, 3.0, num=5) | 通常用来创建等差数列,该例子为创建[2.0,3.0]范围内的5个数 |
np.array([1,2,3],dtype=“i1”) | 创建数组[1,2,3]且数据类型为int8 |
np.arange(4,10,2) | 创建[4,10)范围内并且步长为2的一维数组 |
2、数组的属性
属性名 | 功能 |
ndarray.ndim | 获取数组轴的个数,在python的世界中,轴的个数被称作秩,即获取ndarray的维数 |
ndarray.shape | 如一个n排m列的矩阵,它的shape属性将是(n,m) |
ndarray.size | 数组元素的总个数,等于shape属性中元组元素的乘积。 |
ndarray.dtype | 用来描述数组中元素类型 |
ndarray.itemsize | 数组中每个元素的字节大小 |
数组形状的显示与修改
#显示数组形状
#一维数组
t1=np.arange(12)
print(t1.shape)#(12,)第二个元素不能写1,写1就不是一维数组了
#二维数组
t2=np.array([[1,2,3],[4,5,6]])
print(t2.shape)#(2, 3)
#三维数组
t3=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(t3)
print(t3.shape)#(2, 2, 3)2组2行3列
#修改数组形状
#将一维转换为三维
t4=np.arange(24).reshape((2,3,4))
print(t4)
#三维转换为二维
t5=t4.reshape((4,6))
print(t5)
#二维转换为一维数组
t6=t5.reshape((t5.shape[0]*t5.shape[1],))
print(t6)
t7=t5.flatten()#将数组按行展开,即变成一维数组
print(t7)
3、调整数据类型
t1=np.array([1,1,0,1,0,0],dtype=bool)
t2=t1.astype("int8")#astype()函数改变数据类型为int8
#numpy中的小数
t3=np.array([random.random() for i in range(10)])#随机生成十个小数
t4=np.round(t3,2)#保留两位小数
print(t4)
4、数组的计算
函数名 | 功能 |
np.add(a,n) | 数组a的每个元素加上n |
np.subtract(a,n) | 数组a的每个元素减去n |
np.multiply(a,n) | 数组a的每个元素乘以n |
np.divide(a,n) | 数组a的每个元素除以n |
np.power(a,n) | 数组a的每个元素进行n 次乘方 |
np.mod(a,n) | 数组a的每个元素对n求余 |
np.sqrt(a) | 数组a的每个元素开平方 |
#数组与数字的计算(广播机制)
t5=np.arange(24).reshape((4,6))
print(t5+2)#使每个数组元素都加2
print(t5*2)#使每个数组元素都乘以2
print(t5/2)#使每个数组元素都除以2
#print(t5/0)#使每个数组元素都除以0,nan是不是一个数的意思,inf是无限的意思
#数组与数组的计算
#数组维度相同时
t6=np.arange(100,124).reshape((4,6))
print(t6+t5)#对应位相加
print(t6*t5)#对应位进行相乘
#数组维度不同时(特定情况才可以计算)
#从末尾开始算起的维度,如果两个数组的轴长度相符或其中一方为1,则认为可以进行计算
t7=np.arange(0,6)#(1,6)
print(t5-t7)#t5每一行都按位减去t7
t8=np.arange(4).reshape((4,1))#(4,1)
print(t5-t8)#t5每一列都按位减去t8
5、常用统计函数
函数名 | 功能 |
ndarray.sum(axis=None) | 求数组所有元素的和 |
ndarray.mean(axis=None) | 求数组所有元素的平均值 |
np.median(ndarray,axis=None) | 求数组的中值 |
ndarray.max(axis=None) 或np.max(ndarray) | 求数组中最大值 |
ndarray.min(axis=None)或np.min(ndarray) | 求数组中最小值 |
np.argmax(ndarray) | 求数组中最大值的索引 |
np.argmin(ndarray) | 求数组中最小值的索引 |
np.ptp(ndarray,axis=None) | 求数组的极值(即最大值最小值之差) |
ndarray.std(axis=None) | 求数组的标准差(表现一组数据平均值分散程度的一种度量) |
6、数组的切片与索引
#取行
print(t1[2])
#取连续的多行
print(t1[2:])
print(t1[1,:])#取第二行所有的数
print(t1[2:,:])#取从第三行开始的后面所有的行
#取不连续的多行
print(t1[[2,8,10]])#取第3,9,11行
print(t1[[2,10,3],:])
#取列
print(t1[:,0])
#取连续的多列
print(t1[:,2:])
#取不连续的多列
print(t1[:,[0,2]])#取第1,3列
#取行和列,取第三行和第四列的值
a=t1[2,3]
print(a)
#取多行多列,取第三行到第五行,第二列到第四列的结果
b=t1[2:5,1:4]
print(b)
#取多个不相邻的点
#选出来的结果是(0,0),(2,1),(2,3),第一个[]存储x坐标,第二个[]存储y坐标
c=t1[[0,2,2],[0,1,3]]
print(c)
7、Numpy中的copy和view(深复制与浅复制)
- 浅复制:a=b[:],视图的操作,一种切片,会创建新对象a,但是a的数据完全由b保管,他们两个数据变化是一致的。
- 深复制: a=b.copy()复制,a和b互不影响。
8、Numpy中数值的修改(赋值、布尔索引、三元运算式、裁剪)
#numpy中数值的修改#
#t1[:,2:4]=0
t2=np.arange(24).reshape((4,6))
#bool索引
print(t2<10)#输出的均为bool类型
t2[t2<10]=3#将t2中小于10的数全部修改为3
print(t2)
print(t2[t2>20])#显示t2中所有大于20的数
#numpy中的三元运算符
print(np.where(t2<=3,100,300))#将t2中小于等于3的替换成100,否则替换为300
#numpy中的clip(裁剪)
print(t2.clip(10,18))#小于10的替换为10,大于18的替换为你18
9、数组的拼接与拆分
t1=np.arange(12).reshape((2,6))
t2=np.array(range(12,24)).reshape((2,6))
print(np.hstack((t1,t2)))#水平拼接
# [[ 0 1 2 3 4 5 12 13 14 15 16 17]
# [ 6 7 8 9 10 11 18 19 20 21 22 23]]
#将x按列拆分成2个数组,第二个参数表示拆分成几个数组
x=np.arange(16).reshape(4,4)
x_1=np.hsplit(x, 2)#按列对数组进行拆分
#将x按特定列进行拆分,示例在第二列和第三列进行拆分。第二个参数表示拆分的位置
x_2=np.hsplit(x,(2,3))
print(np.vstack((t1,t2)))#竖直拼接
# [[ 0 1 2 3 4 5]
# [ 6 7 8 9 10 11]
# [12 13 14 15 16 17]
# [18 19 20 21 22 23]]
#vsplit():按行对数组进行拆分
10、数组的行列交换
t1[[0,1],:]=t1[[1,0],:]#交换第一行与第二行
t1[:,[0,1]]=t1[:,[1,0]]#交换第一列与第二列
print(t1)
11、文件读写
#存储文件
a=np.arange(12).reshape((3,4))
np.save('test.npy',a)
#读取文件
#csv文件,逗号分隔值文件,显示:表格状态。源文件:换行和逗号分隔行列的格式化文件,每一行的数据表示一条记录。由于csv便于展示,读取和写入,所以可以用csv文件存储和传输小型数据
#np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
us_file_path="./US_video_numbers.csv"
t1=np.loadtxt(us_file_path,delimiter=",",dtype="int")
12、numpy中的nan和inf
- 当我们读取本地文件为float的时候,如果有缺失,就会出现nan或者做了一个不合适的计算时也会出现nan(比如无穷大减无穷大)
- 当一个数字除以0时会出现无穷inf
- numpy中nan的注意点:1、两个nan是不相等的
2、np.nan!=np.nan为True
3、利用以上特性,判断数据中nan的个数:np.count_nonzero(t!=t)
4、判断一个数是否为nan并替换为0,t[np.isnan(t)]=0
5、nan和任何值计算均为nan
6、numpy中不能将nan替换成0,如果替换则均值会变小,所以一般是将nan替换成均值(中值)或者直接删除nan那一行
#将nan的值改为为均值
import numpy as np
def fill_ndarray(t1):
for i in range(t1.shape[1]):#遍历列
temp_col=t1[:,i]#当前的一列
nan_num=np.count_nonzero(temp_col!=temp_col)#统计nan的个数
if nan_num !=0:#不为0说明当前列中有nan
temp_not_nan_col=temp_col[temp_col==temp_col]#当前一列不为nan的数组
temp_col[np.isnan(temp_col)]=temp_not_nan_col.mean()#选中当前为nan的位置赋值为均值
return t1
if __name__=='__main__':
t1=np.arange(12).reshape((3,4)).astype("float")
t1[1,2:]=np.nan
print(t1)
t1=fill_ndarray(t1)
print(t1)
13.numpy中的random的应用
名称 | 作用 |
np.random.random([size]) | 返回随机的浮点数,在半开区间 [0.0, 1.0) |
np.random.rand(d0, d1, …, dn) | 生成生成[0,1)之间随机浮点数 |
np.random.randn(d0, d1, …, dn) | 生成一个浮点数或N维浮点数组,取数范围:正态分布的随机样本数 |
np.random.randint(low, high, size=(?,?)) | 生成一个整数或N维整数数组,取数范围:若high不为None时, 取[low,high)之间随机整数,否则取值[0,low)之间随机整数。 |
np.random.seed([seed]) | 当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数 |
后续还会有矩阵,图形图像处理的补充