Numpy模块(科学计算)

概要

  主体:数据分析三剑客之numpy科学计算库

  • numpy简介

  • numpy前期准备

  • numpy数据结构

  • numpy数据类型

  • numpy其他功能


详情

  • numpy简介

    Numpy是高性能科学计算和数据分析的基础包,也是pandas等其他数据分析工具的基础,具有多维数组功能,使运算更加高效迅速。

# 下载模块
    在notebook中执行pip命令需要在语句前加上一个感叹号
        !pip3 install numpy
    Anaconda也提供下载模块的工具(与pip一致)
        conda install numpy
# 导入模块
    import numpy as np # 更加倾向于起别名 np
  • numpy前期准备

"""
    notebook单元格左侧 In[*]表示当前单元格正在执行,执行完毕后*变回数字
"""
# 身高
height = [159,163,165,172,180]
# 体重
weight = [45,50,52,63,70]
# BMI指数:身体质量指数=体重(kg)/身高(m)的平方
BMI = weight/(height/100)**2
'''事实上,会报错!'''

python与numpy效率对比

h = []
w = []
for i in range(100000000)
    h.append(random.randint(159,180))
    w.append(random.uniform(45,81))
'''Python代码实现'''
import time
# 开始时间
startTime = time.time()
for i in range(100000000):
    w[i]/(h[i]/100)**2
# 结束时间
endTime = time.time()
# 求时间差
dealTime = endTime-startTime
print(dealTime)

'''Numpy模块实现(更加高效)'''
import numpy as np
H = np.array(h)
W = np.array(w)
# 利用数组进行运算
startTime = time.time()
BMI = W/(H/100)**2
endTime = time.time()
dealTime = endTime-startTime
print(dealTime)

可以看到,numpy模块利用数组进行计算花费的时间更短 !!!

  • numpy数据结构

多维数组

一维数组:np.array([1,2,3,4])

二维数组(矩阵):np.array([[1,2,3,4],[5,6,7,8]])

三维数组(不常见):np.array([[[1,2,3,4],[5,6,7,8]]])

注意

1.numpy中同一个数组内所有元素的数据类型一致
    # 布尔值可以直接转换为整型: 真>>>1,假>>>0
    np.array([1,2,False]) >>> array([1, 2, 0])
    # 数组中存在浮点型数据,所有整型都会转换为浮点型
    np.array([1,2,3.1]) >>> array([1.,2.,3.1]) 

2.numpy操作数组的时候,同一个数组内的所有数据均参与操作
    a1 = np.array([1,2,3,4])
    a2 = np.array([7,8,9,1])
    # a1+a2 a1所有数据与a2对应的数据相加
    a1 + a2 >>> array([ 8, 10, 12,  5])
    # a1*a2 a1所有数据与a2对应的数据相乘
    a1 * 10 >>> array([10, 20, 30, 40])

  • numpy数据类型

避免与Python原本数据类型冲突,个别类型名称后跟下划线
1.布尔型: bool_
2.整型: int_、int8、int16、int32、int64
eg: int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数
3.无符号整数: uint8、uint16、uint32、uint64
4.浮点型: float_、float16、float32、float64
5.复数型: complex_、complex64、complex128

可以看到,numpy数据类型以数字类型居多,由于该模块主要用于科学计算,只有数字可以参与。

  • numpy其他功能

常用属性

1、T:数组的转置(多维数组)

li1 = [
    [1,2,3],
    [4,5,6]
] 
a = np.array(li1)
a.T
把一个二维数组的行与列的数据进行互换,较为常用。

2、dtype:数组元素的数据类型

li1 = [
    [1,2,3],
    [4,5,6.1]
] 
a = np.array(li1)
# 查看类型
a.dtype

3、size:数组元素的个数

import numpy as np
li1 = [
    [1,2,3],
    [4,5,6.1]
] 
a = np.array(li1)
# 查看数组中元素个数
a.size

4、ndim:数组维数

import numpy as np
li1 = [
    [1,2,3],
    [4,5,6.1]
] 
a = np.array(li1)
# 查看数组维数
a.ndim

5、shape:数组的维度大小(返回元组)

import numpy as np
li1 = [
    [1,2,3],
    [4,5,6.1]
] 
a = np.array(li1)
# 查看数组形状
a.shape

常用方法

1、查看某方法使用说明

(1)在方法后跟?执行即可
(2)在方法名后按住SHIFT再按TAB即可(第二次按TAB显示全部)

2、array():将列表转换为数组,可指定dtype

import numpy as np
li1 = [
    [1,2,3],
    [4,5,6.1]
] 
a = np.array(li1,dtype='float_')
# 列表切换成数组,指定类型
a

3、arange():range在numpy下的版本,支持浮点数

import numpy as np
a = np.arange(1,10,0.2)
# 均匀分布
a

4、linspace():类似arange(),添加第三个参数控制数组长度

import numpy as np
a = np.linspace(1.2,3.6,20)
# 均匀分布
a

5、zeros():根据指定形状和dtype创建全0数组

import numpy as np
a = np.zeros((3,6),dtype='float_')
# 均匀分布
a

6、ones():根据指定形状和dtype创建全1数组

import numpy as np
a = np.ones((6,2),dtype='float_')
# 全一数组
a

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

import numpy as np
a = np.empty((2,2),dtype='float_')
# 空数组
a

8、eye():根据指定边长和dtype创建单位矩阵

import numpy as np
a=np.eye(6,dtype='float_')
# 单位矩阵
a

索引与切片

1、针对一维数组,numpy索引和切片操作与python中一致

2、花式索引(间断索引)

3、布尔值索引

4、针对二维数组索引与切片

  res[行索引(切片),列索引(切片)]
可以用英文输入法的冒号获取二维数组的所有行或列元素

运算符

1、数学运算符

+  数组对应元素的加和
-  数组对应元素的差
*  数组对应元素的乘积
/  数组对应元素的商

 

%     数组对应元素商的余数
//    数组对应元素商的整除数
**    数组对应元素的幂指数

 2、比较运算符

>
        等价np.greater(a1,a2)
        判断a1的元素是否大于a2的元素
>= 等价np.greater_equal(a1,a2) 判断a1的元素是否大于等于a2的元素 < 等价np.less(a1,a2) 判断a1的元素是否小于a2的元素 <= 等价np.less_equal(a1,a2) 判断a1的元素是否小于等于a2的元素 == 等价np.equal(a1,a2) 判断a1的元素是否等于arr2的元素 != 等价np.not_equal(a1,a2) 判断a1的元素是否不等于a2的元素

函数

1、常用数学函数

  np.round(arr)  对各元素四舍五入

  np.sqrt(arr)     计算各元素的算术平方根

  np.square(arr)   计算各元素的平方值

  np.exp(arr)   计算以e为底的指数

  np.power(arr, α)   计算各元素的指数

  

  np.log2(arr)     计算以2为底各元素的对数

  np.log10(arr)   计算以10为底各元素的对数

  np.log(arr)    计算以e为底各元素的对数

  

2、常用统计函数

"""  
  注意:
      axis=0时,计算数组各列的统计值 
      axis=1时,计算数组各行的统计值
"""
np.min(arr,axis)        按照轴的方向计算最小值
np.max(arr,axis)    按照轴的方向计算最大值
np.mean(arr,axis)   按照轴的方向计算平均值
np.median(arr,axis)  按照轴的方向计算中位数
np.sum(arr,axis)    按照轴的方向计算和
np.std(arr,axis)    按照轴的方向计算标准差
np.var(arr,axis)    按照轴的方向计算方差

随机数

numpy中的random子模块---np.random

  rand                给定形状产生随机数组(0到1之间的数)    
  randint        给定形状产生随机整数
  choice         给定形状产生随机选择
  shuffle        与random模块的shuffle相同,将元素打乱    
  uniform         给定形状产生随机数组(随机均匀分布)
  normal          随机正态分布 

  

 

posted @ 2021-10-13 15:08  Leguan001  阅读(113)  评论(0)    收藏  举报