龙空技术网

Python Numpy库用法笔记

fqllll 11

前言:

而今我们对“py中numpy用法”都比较关心,小伙伴们都想要学习一些“py中numpy用法”的相关知识。那么小编也在网上汇集了一些对于“py中numpy用法””的相关知识,希望同学们能喜欢,小伙伴们快快来学习一下吧!

Python Numpy库用法笔记一、简单了解Numpy1.1通过ndarray存储数据1.2 ndarray在计算中的优势二、ndarray的属性三、基本操作3.1 生成数组的方法3.1.1生成0和13.1.2 从现有数组中生成3.1.3生成固定单位的数组3.1.4 生成随机数组3.2 数组的索引、切片3.2.1 一维数组的切片、索引3.2.2 二维数组的切片、索引3.2.3 三维数组的切片、索引3.3 形状的修改3.4类型的修改3.5数组的去重四、ndarray运算4.1 逻辑运算4.1.1布尔索引4.1.2通用判断4.1.3 三元运算符4.2 统计运算4.2.1 统计指标4.2.2 返回最大值、最小值的位置4.3 数组间运算4.3.1 数组与数的运算4.3.1 数组与数组的运算4.4 矩阵运算4.4.1 矩阵存储方法4.4.2 矩阵的乘法五、ndarray的合并、分割5.1ndarray的合并5.2 ndarray的分割六、IO操作与数据处理

用于日常学习的积累,如有不足请多多指教。

一、简单了解Numpy

Numpy可以看成是2个缩写单词拼接而成:

·num(numerical) 数值化的

·py(python)

Numpy→数值计算库

Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。Numpy使用ndarray对象来处理多维数组,该对象是一个快速而且灵活的大数据容器。

ndarray可以看成是3个缩写单词拼接而成:

·n任意个

·d(dimension)维度

·array数组

1.1通过ndarray存储数据

import numpy as npnp.array([[80,58,75,78],        [98,70,85,84],        [90,75,90,90],        [88,70,82,80]])
1.2 ndarray在计算中的优势

Numpy在计算中的优势

1.存储内容

1)ndarray存储数据类型相同且存储地址连续,但通用性不强

2)list存储数据类型可以不相同,存储地址不一定连续,但通用性强

2.ndarray支持并行化运算

3.Numpy底层使用C语言编写,数组操作不受Python解释器的影响,效率高于纯Python代码

代码示例:

import numpy as npimport timeimport randommylist=[i for i in range(100000000)]myndarray=np.array(list)start_time1=time.time()sum(mylist)end_time1=time.time()start_time2=time.time()np.sum(myndarray)end_time2=time.time()print(f"list运算时间:{end_time1-start_time1}")print(f"ndarray运算时间:{end_time2-start_time2}")

结果:

二、ndarray的属性

属性名字

属性解释

ndarray.shape

数组位的的元组

ndarray.dtype

数组元素的类型

ndarray.ndim

数组维度

ndarray.size

数组中的元素数量

ndarray.itemsize

一个数组元素的长度

代码示例:

import numpy as npoutput_value=np.array([[80,58,75,78],                        [98,70,85,84],                        [90,75,90,90],                        [88,70,82,80]])output_value.shapeoutput_value.dtypeoutput_value.ndimoutput_value.sizeoutput_value.itemsize
三、基本操作3.1 生成数组的方法3.1.1生成0和1
np.zeros(shape) #生成一组全是零的数组npones(shape) #生成一组全是一的数组
代码示例:
np.zeros(shape=(4,4))
3.1.2 从现有数组中生成
np.array() #深拷贝np.copy() #深拷贝np.asarray() #浅拷贝

深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。

浅拷贝只是一种简单的拷贝 拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间。

代码示例:

myarray=np.zeros(shape=(2,2))array1=np.array(myarray)array2=np.copy(myarray)array3=np.asarray(myarray)print(f"array1:\n{array1}\narray2:\n{array2}\narray3:\n{array3}\n")myarray[0][0]=1print(f"array1:\n{array1}\narray2:\n{array2}\narray3:\n{array3}\n")

结果:

3.1.3生成固定单位的数组

np.linspace(start,stop,num,...)#start、stop→左闭右闭:[start, stop]#num:生成等距离数据的个数np.arange(start,stop,step,...)#start、stop→左闭右闭:[start, stop)#step是步长#(与range(start,stop,step)类似)
代码示例:
np.linspace(0, 10, 5)np.arange(0, 10, 2)

结果:

3.1.4 生成随机数组

np.random.uniform(low=-1,high=1,size=100) #均匀分布生成随机数np.random.normal(loc=0.0,scale=1.0,size=None) #正态分布生成随机数#loc:此概率分布的均值#scale:此概率分布的标准差#size:输出的shape
代码示例:
np.random.uniform(low=-1,high=1,size=100)np.random.normal(loc=0.0,scale=1.0,size=100)

结果:

3.2 数组的索引、切片3.2.1 一维数组的切片、索引

data=np.random.uniform(low=-1,high=1,size=10)print(data)#索引:第5个数据print(data[4])#切片:第3到5个数据print(data[2:5])

结果:

3.2.2 二维数组的切片、索引

data2=np.array([[80,58,75,78],                [98,70,85,84],                [90,75,90,90],                [88,70,82,80]])                #索引:第2行第3个数据print(data2[1,2])#切片:第2行第2-3个数据print(data2[1,1:3])

结果:

3.2.3 三维数组的切片、索引

data3=np.array([[[1,2],[3,4]],[[5,6],[7,8]]])print(data3)#索引print(data3[1,0,1])#切片print(data3[0,1,0:2])
3.3 形状的修改
ndarray.reshape(shape) 返回新的ndarray,原始数据没有改变ndarray.resize(shape) 没有返回值,对原始的ndarray进行了修改ndarray.T 转置 行变成列,列变成行
data4=np.array([[1,2,3,4],                [5,6,7,8],                [9,10,11,12]])                print(data4.reshape(4,3)) #返回一个新的ndarrayprint(data4)data4.resize(4,3) #没有返回值print(data4)data4=np.array([[1,2,3,4],                [5,6,7,8],                [9,10,11,12]])print(data4.T) #返回一个新的ndarrayprint(data4)

结果:

3.4类型的修改

ndarray.astype(np.int64)
代码示例:
data4=np.array([[1,2,3,4],                [5,6,7,8],                [9,10,11,12]])print(data4.dtype)print(data4.astype(np.float64))

结果:

3.5数组的去重

np.unique(ndarray)
代码示例:
data5=np.array([[1,2,3,4],                [3,4,5,6],                [5,6,7,8]])print(np.unique(data5)) #返回一个新的ndarray#或者使用#print(set(temp.flatten()))

结果:

四、ndarray运算4.1 逻辑运算4.1.1布尔索引代码示例:

data5=np.array([[1,2,3,4],                [3,4,5,6],                [5,6,7,8]])                print(data5 > 5) #将data5中全部元素与5比较大小,并返回布尔值data5[data5 > 5]=0	#提取data5中大于5的值print(data5)

结果:

4.1.2通用判断

np.all(bool)#全是True返回Truenp.any(bool)#有一个True返回True
代码示例:
data5[data5 > 5]=0np.all(data5) #Falsenp.any(data5) #True
4.1.3 三元运算符
np.where(bool,改变True位置的值,改变False的位置的值)np.logical_and()np.logical_or()
代码示例:
np.where(data5,1,0)	#np.where(data5!=0,1,0)

结果:

np.where(np.logical_and(data5>2,data5<5),1,0)np.where(np.logical_or(data5>2,data5<5),1,0)

结果:

4.2 统计运算4.2.1 统计指标

np.min(ndarray,axis,...)np.max(ndarray,axis,...)np.median(ndarray,axis,...)np.mean(ndarray,axis,...)np.std(ndarray,axis,...)np.var(ndarray,axis,...)#axis=1:按行计算#axis=0:按列计算
代码示例:
np.max(data5,axis=1)

结果:

4.2.2 返回最大值、最小值的位置

np.argmax(temp, axis)np.argmin(temp, axis)
代码示例:
np.argmax(data5,axis=1)

结果:

4.3 数组间运算4.3.1 数组与数的运算

将数组内所有的数字分别与另外的数进行四则运算。

代码示例:

data5+1data5*5
4.3.1 数组与数组的运算

当操作两个数组时,numpy会比较他们的形状(shape),当满足下列情况时才能进行运算:

维度相同shape中又一个位置为1

比如

①[[1,0],[0,4]]

shape(2,2)=> shape(1,2,2)

②[[[1,0],[0,4]],[[1,0],[0,4]]]

shape(2,2,2)

①+②=[[[2, 0], [0, 8]], [[2, 0], [0, 8]]]

代码示例:

arr1=np.array([[1,2],[3,4]])arr2=np.array([[1,0],[0,4]])arr3=np.array([[1,1],[0,0],[2,2]])arr4=np.array([[[1,0],[0,4]],[[1,0],[0,4]]])arr2+arr4arr1*arr2arr2*arr3 #抛出异常,shape不同

结果:

4.4 矩阵运算

矩阵必须是二维的

4.4.1 矩阵存储方法ndarray的二维数组matrix

np.mat()
4.4.2 矩阵的乘法

矩阵乘法规则:

第一个矩阵列数=第二个矩阵行数

(m行,n列)*(n行,s列)=(m行,s列)

np.matmul(mat,mat)np.dot()
代码示例:
np.matmul(arr1,arr2) #用ndarray存储时的运算mat1=np.mat(arr1)mat2=np.mat(arr2)mat1*mat2

结果:

五、ndarray的合并、分割5.1ndarray的合并

np.hstack(ndarray,ndarray)	#水平拼接np.vstack(ndarray,ndarray) #竖直拼接np.concatenate((ndarray,ndarray,...),axis)
代码示例:
a=np.array([1,2])b=np.array([3,4])c=np.array([[5],[6]])np.hstack((a,b))np.concatenate((a,b),axis=0)#array([1, 2, 3, 4])np.vstack((a,b))#array([[1, 2],       [3, 4]])np.concatenate(((np.vstack((a,b))),c),axis=1)#array([[1, 2, 5],       [3, 4, 6]])

结果:

5.2 ndarray的分割

np.split(ndarray,sections,axis)
代码示例:
a=np.arange(0,10)#[0 1 2 3 4 5 6 7 8 9]np.split(a,5)#[array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])]np.split(a,[1,5,9])#[array([0]), array([1, 2, 3, 4]), array([5, 6, 7, 8]), array([9])]

结果:

六、IO操作与数据处理

np.genfromtxt(path,delimiter)#delimiter为分隔符

==注意:==无法读取字符串,会变成缺失值

解决方法

1)删除缺失值

2)替换缺失值

代码示例:

np.genfromtxt(r"C:\Users\pc\Desktop\a.txt",delimiter=',')

结果:

标签: #py中numpy用法