numpy简介

由于Python自身的动态语言特性而带来的运行速度方面的损失,其次便是Python在大数据处理方面(数G甚至几十上百G)的捉襟见肘。NumPy已经做了相当程度的优化,可以对大数组的数据进行高效处理。优化包括NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象,如此便可以加速数据索引的速度。其次,NumPy调用了大量的用C语言编写的算法库,使得其可以直接操作内存,不必进行Python动态语言特性所含有的前期类型检查工作,从而大大提高了运算速度。最后,NumPy所有独有的可以在整个数组上执行复杂的计算也能够大幅提高运算效率(基于NumPy的算法要比纯Python快10到100倍,甚至会快更多)。 虽然NumPy有着以上的种种出色的特性,其本身则难以独支数据分析这座大厦,这是一方面是由于NumPy几乎仅专注于数组处理,另一方面则是数据分析牵涉到的数据特性众多,需要处理各种表格和混杂数据,远非纯粹的数组(NumPy)方便解决的,而这就是pandas发力的地方。因此,在下一篇文章里我将介绍pandas的常用操作。

numpy常用操作

  1. N维数组对象(ndarray) ndarray是一个多维数组对象,一般要求所有元素类型相同,数组下标从0开始。
  2. 对象的属性
属性 说明
.dim 秩,即轴的数量或维度的数量
.shape 对象的尺度,对于矩阵来说,即n行m列
.size 对象的个数,即n*m的值
.dtype 对象的类型
  • 实例
import numpy as np
a=np.array([[1,3,5,7],[2,4,6,8]])
a
a.ndim
a.shape
a.size
a.dtype
#运行结果
array([[1, 3, 5, 7],
       [2, 4, 6, 8]])
2
(2,4)
6
dtype('int32')
  1. 数组的创建方法
函数 说明
np.arange(n) 类似range函数,放回ndarray类型,元素从0到n-1
np.ones(shape) 根据shape生成一个全1数组,shape是元组类型
np.zeros(shape) 根据shape生成一个全0数组
np.full(shape,val) 根据shape生成一个数组,每个元素值都为val
np.eye(n) 创建一个正方的n*n单位矩阵,对角线全为1其余为0
np.linspace(b,e,n) 根据起始值等间距的填充数据,形成数组
  • 实例
    np.arange(10)
    np.ones((3,6))
    np.zeros((4,4))
    np.full((3,2),10)
    np.eye(3)
    np.ones((2,3,4))
    np.linspace(1,10,10)
#运行结果
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
array([[10, 10],
       [10, 10],
       [10, 10]])
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],
       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
  1. 数组的变换
方法 说明
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,但原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中两个进行交换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
  • 实例
a=np.ones(3,4)
a.resize(4,3)
a.flatten()
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
  1. 数组的索引和切片
    • 实例
import numpy as np
#一维数组的索引和切片
a=np.array([1,3,5,7,9])
a[1:4:2]            #[起始编号:终止编号(不含):步长,三元素冒号分割]
a[2]                #编号0从左开始递增,或-1从右开始递减
a[-2]
#二维数组的切片和索引
a=np.arange(24).reshape((2,3,4))
a[:,1,3]            #选取一个维度用:,每个维度切片方法与一维数组相同
a[:,1:3,:]
a[1,2,3]            #每个维度一个索引值,逗号分隔
a[-1,-2,-3]
#运行结果
#一维数组的索引和切片
array([3, 7])
5
7
#二维数组的切片和索引
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],
       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
array([ 7, 19])    
array([[[ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],
       [[16, 17, 18, 19],
        [20, 21, 22, 23]]])
23
17
  1. 数组的运算
    • numpy一元函数
函数 说明
np.abs(x) , np. fabs(x) 计算数组各数的绝对值
np.sqrt(x) 计算数组各元素的平方
np.square() 计算数组各元素的平方
np.log(x), np.log10(x), np.log2(x) 计算各元素的自然对数,10底对数和2底对数
np.ceil(x),np.floor(x) 前者向上取整,后者向下取整
np.rint(x) 四舍五入
np.modf(x) 将各元素的小数和整数部分以两个独立的数组形式返回
np.cos(x), np.cosh(x), np.sin(x), np.sinh(x), np.tan(x), np.tanh(x) 计算各元素的普通型和双曲型三角函数
np.exp(x) 各元素指数值
np.sign(x) 计算各元素的符号值,1(+),0(0),-1(-)
  • numpy二元函数
函数 说明
+, -, *, / **
np.maximum(x,y),np.fmax(), np.minimum(x,y),np.fmin()
np.mod(x,y) 取模运算
np.copysign(x,y) 将y中各元素值得符号赋给x
>, <=, >=, !=, == 算术比较
  • 实例
    a=np.arange(24).reshape((2,3,4))
    b=np.sqrt(a)
#运行结果
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],
       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
array([[[0.        , 1.        , 1.41421356, 1.73205081],
        [2.        , 2.23606798, 2.44948974, 2.64575131],
        [2.82842712, 3.        , 3.16227766, 3.31662479]],
       [[3.46410162, 3.60555128, 3.74165739, 3.87298335],
        [4.        , 4.12310563, 4.24264069, 4.35889894],
        [4.47213595, 4.58257569, 4.69041576, 4.79583152]]])
array([[[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.]],
       [[12., 13., 14., 15.],
        [16., 17., 18., 19.],
        [20., 21., 22., 23.]]])  
  1. numpy的随机数函数子库
函数 说明
rand(d0,d1....,dn) 根据d0-dn创建随机数数组,浮点数,[0,1),均匀分布
randn(d0,d1...,dn) 根据d0-dn创建随机数组,标准正态分布
randint(low,high,shape) 根据shape创建随机整数或数组,范围是[low,high)
seed(s) 随机数种子,s是给定的种子值,作用:使得随机数据可预测,即只要s的值一样,后续生成的随机数都一样。
uniform(low,high,size) 生成具有均匀分布的数组,low为起始值,high为结束值,size为形状
normal(loc,scale,size) 生成具有正态分布的数组,loc为均值,scale为标准差
poisson(lam,size) 生成具有泊松分布的数组,lam随即事件发生概率,
  • 实例
import numpy as np
a=np.random.rand(2,3,4)
b=np.random.randn(2,3,3)
c=np.random.randint(100,200,(2,4))
np.random.seed(10)
np.random.randint(100,200,(2,4))
np.random.seed(10)              #当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数
np.random.randint(100,200,(2,4))
u=np.random.uniform(1,10,(3,4))
n=np.random.normal(10,5,(3,4))
#运行结果
array([[[0.44183317, 0.43401399, 0.61776698, 0.51313824],
        [0.65039718, 0.60103895, 0.8052232 , 0.52164715],
        [0.90864888, 0.31923609, 0.09045935, 0.30070006]],
       [[0.11398436, 0.82868133, 0.04689632, 0.62628715],
        [0.54758616, 0.819287  , 0.19894754, 0.8568503 ],
        [0.35165264, 0.75464769, 0.29596171, 0.88393648]]])
array([[[ 1.23620533,  2.46532508,  1.38323223],
        [ 0.34623312,  1.02251611,  0.16681027],
        [ 1.65671662,  0.66788961, -0.22994664]],
       [[-1.12955119, -0.6399626 ,  0.31383052],
        [-1.22583598, -0.22179314,  1.33992631],
        [ 0.02930971,  1.98538575,  1.4471656 ]]])        
#设置了随机数种子后
array([[109, 115, 164, 128],
       [189, 193, 129, 108]]) 
array([[109, 115, 164, 128],
       [189, 193, 129, 108]])        

array([[3.39009514, 3.37242561, 2.35340081, 7.15436586],
       [8.34941652, 4.02464426, 9.01734878, 2.78309632],
       [1.27554988, 8.89853446, 7.54691962, 5.86792838]])  
array([[ 8.79669028,  4.86323988, 12.12007535, 17.04310437],
       [12.19996008,  7.85882803,  8.4399366 ,  7.15558307],
       [ 2.07529494, 15.27676579,  0.36710445, 13.49291939]])                
  1. numpy的统计函数
函数 说明
sum(a,axis=None) 根据给定轴axis计算数组a相关元素之和,axis为整数或元组
mean(a,axis=None) 计算期望
average(a,axis=None,weights=None) 计算加权平均值
std(a,axis=None) 计算标准差
var(a,axis=None 计算方差
min(a), max(a) 计算a中的最小值,最大值
ptp(a) 计算最大值与最小值的差
median(a) 计算中位数
  1. numpy的梯度函数
函数 说明
np.gradient(f) 计算数组f中元素的梯度,当f为多维时,返回每个维度梯度

梯度:连续纸之间的变化率,即斜率

具体参考:https://blog.csdn.net/u012005313/article/details/84035371

  1. 数据的CSV文件存取
np.savetxt(frame,array,fmt='%.2f',delimiter=None)
  • frame:文件名
  • array:写入文件的数组
  • fmt:写入文件的格式,例如:%d %.2f
  • delimiter:分割字符串,默认是任何空格
np.loadtxt(frame,dtype=np.float,delimiter=None,ynpack=False)
  • frame:文件名
  • dtype:数据类型(可选)
  • delimiter::分割字符串,默认是任何空格
  • unpack:如果是True,读入数学将分别写入不同变量

注意:np.savetxt() 和np.loadtxt()只能存取一维和二维数组。

np.tofile(frame,sep='',format='%s')
  • frame:文件名
  • sep:数据分割字符串,如果是空串,写入文件为二进制
  • format:写入数据的格式
np.fromfile(frame,dtype=float,count=-1,sep='')
  • frame:文件名
  • dtype:读入的数据类型
  • count:读入元素的个数,-1表示读入整个文件
  • sep:数据分割字符串,如果是空串,写入文件为二进制

注意:该方法需要知道存入文件时数组的维度和元素类型

便捷文件存取

np.save(frame,array) np.load(frame)

Last modification:June 28th, 2020 at 11:17 am
如果觉得我的文章对你有用,请随意赞赏