Python基础——Numpy库超详细介绍+实例分析+附代码

2021-01-05 10:26:37 浏览数 (1)

参考链接: Python中的numpy.floor

1、NumPy简介 

NumPy是高性能科学计算和数据分析的基础包,计算速度要比python自带的函数快很多,非常好用。一般不需要安装,装Python就自动装了,如果需要: 

pip3 install numpy

然后导出 

import numpy as np

2、常用方法 

2.1最常用的 

2.2更多 

array.shape & array的规格 array.ndim 数据的维数 array.dtype &array的数据规格 numpy.zeros(dim1,dim2) &创建dim1dim2的零矩阵 numpy.arange(start, stop, step, dtype = None) 返回一维的数组 numpy.eye(n) /numpy.identity(n) &创建nn单位矩阵 numpy.array([…data…], dtype=float64 ) 转换数据类型 array.astype(numpy.float64) &更换矩阵的数据形式 array.astype(float) &更换矩阵的数据形式 array * array &矩阵点乘 array[a:b] &一维数据切片 array.copy() &得到ndarray的副本,而不是视图 array [a] [b]=array [ a, b ] &两者等价 name=np.array([‘bob’,‘joe’,‘will’]) res=name==’bob’ res= array([ True, False, False], dtype=bool) data[True,False,……] 索引,只索取为True的部分,去掉False部分 通过布尔型索引选取数组中的数据,将总是创建数据的副本。 data[ [4,3,0,6] ] 索引,将第4,3,0,6行摘取出来,组成新数组 numpy.reshape(a,b) 将ab的一维数组排列为ab的形式 array([a,b,c,d],[d,e,f,g]) 返回一维数组,分别为[a,d],[b,e],[c,f],[d,g] array.T &array的转置 numpy.random.randn(a,b) & 生成a*b的随机数组 numpy.dot(matrix_1,matrix_2) &矩阵乘法 array.transpose( (1,0,2,etc.) ) & 对于高维数组,转置需要一个由轴编号组成的元组 

3、ndarray创建以及数据类型 

3.1 ndarray创建 

array() 将列表转换为数组,可选择显式指定dtype 

arange() range的numpy版,支持浮点数 linspace() 类似arange(),第三个参数为数组长度 zeros() 根据指定形状和dtype创建全0数组 ones() 根据指定形状和dtype创建全1数组 

**empty()**         

根据指定形状和dtype创建空数组(随机值)

**eye()**          

 根据指定边长和dtype创建单位矩阵

3.2 数据类型 

ndarray数据类型:dtype: 布尔型:bool_ 整型:int_ int8 int16 int32 int64 无符号整型:uint8 uint16 uint32 uint64 浮点型:float_ float16 float32 float64 复数型:complex_ complex64 complex128 

4、Numpy索引和切片 

4.1普通索引 

1 数组和标量之间的运算: 可以直接进行加减乘除的运算(对每一个元素进行) a 1 a*3 1//a a0.5 2 同样大小数组之间的运算: a b a/b ab 3 数组的索引: 一维数组:a[5] 多维数组:a[2][3]或a[2,3] 4 数组的切片: 一维数组:a[3:6],a[:5] 多维数组:a[3:6,1:7],a[:,1:7] 注意:与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。 【解决方法:copy()】 

4.2 布尔索引 

1 给一个数组,选出数组中所有大于5的数? a[a>5] 

2 给一个数组,选出数组中所有大于5的偶数? a[(a>5)&(a%2==0)] 

3 给一个数组,选出数组中所有大于5的数和偶数 a[(a>5)|(a%2==0)] 

4.3 花式索引 

1 对于一个数组,选出其第1,3,4,6,7个元素,组成新的二维数组? 答案:a[[1,3,4,6,7]] 

2:对一个二维数组,选出其第一列和第三列,组成新的二维数组? 答案:a[:,[1,3]] 

5、NumPy:通用函数以及缺失值表示 

5.1一元函数 

numpy.sqrt(array) 平方根函数 

numpy.exp(array) e^array[i]的数组 

numpy.abs/fabs(array) 计算绝对值 

numpy.square(array) 计算各元素的平方 等于array**2 

numpy.log/log10/log2(array) 计算各元素的各种对数 

numpy.sign(array) 计算各元素正负号 

numpy.isnan(array) 计算各元素是否为NaN 

numpy.isinf(array) 计算各元素是否为NaN 

numpy.cos/cosh/sin/sinh/tan/tanh(array) 三角函数 

numpy.modf(array) 将array中值得整数和小数分离,作两个数组返回 

numpy.ceil(array) 向上取整,也就是取比这个数大的整数 (如果是整数就取本身) 

numpy.floor(array) 向下取整,也就是取比这个数小的整数 

numpy.rint(array) 四舍五入 

numpy.trunc(array) 向0取整 

numpy.cos(array) 正弦值 numpy.sin(array) 余弦值 numpy.tan(array) 正切值 

5.2 二元函数:add, substract, multiply 

numpy.add(array1,array2) 元素级加法 

numpy.subtract(array1,array2) 元素级减法 

numpy.multiply(array1,array2) 元素级乘法 

numpy.divide(array1,array2) 元素级除法 array1/array2 

numpy.power(array1,array2) 元素级指数 array1^array2 

numpy.maximum/minimum(array1,aray2) 元素级最大值 

numpy.fmax/fmin(array1,array2) 元素级最大值,忽略NaN 

numpy.mod(array1,array2) 元素级求模 

numpy.copysign(array1,array2) 将第二个数组中值得符号复制给第一个数组中值 

numpy.greater/greater_equal/less/less_equal/equal/not_equal (array1,array2) 元素级比较运算,产生布尔数组 

numpy.logical_end/logical_or/logic_xor(array1,array2) 元素级的真值逻辑运算 

5.3 缺失值表示 

numpy里有缺失值的表示方法 

m=np.nan

m==m

np.isnan(m)

 用~方法删除缺失值: 

d=np.array([m,1,3,0])

d[~np.isnan(d)]

六、NumPy:数学和统计方法 

常用函数: 

c = np.array([1.1,-2.9,3,4.6,5,4,7,8,-9.7,10])

sum 求和  cumsum 求前缀和  mean 求平均数 

std 求标准差 

var 求方差 

min 求最小值 

max 求最大值 

argmin 求最小值索引 

argmax 求最大值索引  

七、NumPy:随机数生成 

随机数生成函数在np.random子包内 常用函数: 

rand  给定形状产生随机数组(0到1之间的数)  randint  给定形状产生随机整数 

choice  给定形状产生随机选择  shuffle  与random.shuffle相同 

uniform  给定形状产生随机数组 

部分代码 

需要完整代码可评论。 

import numpy as np

x=np.array([[1.0,0.0,0.0],[0.,1.,2.]]) #定义了一个二维数组,大小为(2,3)

x

np.array([[1., 0., 0.],

       [0., 1., 2.]])

x.ndim   #数组维度数

2

x.shape    #数组的维数,返回的格式(n,m),其中n为行数,m为列数

(2, 3)

x.size    #数组元素的总数

6

x.dtype   #数组元素类型

np.dtype('float64')  #64位浮点型

x.itemsize  #每个元素占有的字节大小

8

x.data    #数组元素的缓冲区

'''索引'''

a = np.array([1,2,3,4,5,4,7,8,9,10])

a[a>5&(a%2==0)]  #注意加括号,不加括号错误,如下 

#输出:array([ 1, 2, 3, 4, 5, 4, 7, 8, 9, 10])

a[(a>5)&(a%2==0)] 

b = np.array([1,-2,3,4,5,4,7,8,-9,10])

np.sign(b)

np.modf(b)[0]#返回两个数组

c = np.array([1.1,-2.9,3,4.6,5,4,7,8,-9.7,10])

np.ceil(c)

np.floor(c)

#5.2

np.add(b,c)

np.subtract(b,c)

np.multiply(b,c)

np.maximum(b,c)

np.fmax(b,c)

np.mod(b,c)

np.logical_and(b,c)

#5.3

m=np.nan

m==m

np.isnan(m)

d=np.array([m,1,3,0])

d[~np.isnan(d)]

'''6'''

c = np.array([1.1,-2.9,3,4.6,5,4,7,8,-9.7,10])

np.sum(c)

np.cumsum(c)

np.mean(c)

np.argmin(c)

'''7'''

np.random.rand(3,2)

np.random.randint(3,4)

np.random.choice(3,4)

0 人点赞