numpy模块简介

nunpy是高性能科学计算和数据分析的基础包,也是pandas等其他数据分析工具的基础。

numpy具有多维数组功能,运算更加高效快速。

 numpy模块_二维数组

 

 

下载模块

在notebook中如果需要执行pip命令下载模块,只需要在命令行的开头加上一个感叹号即可

!pip install numpy

在安装完之后anaconda之后该软件也会给我们提供一个下载模块的工具

conda使用方式与pip一致

conda install numpy 

 

导入模块

import numpy
import numpy as np  # 更加倾向于起别名 np

  

numpy前戏

notebook单元格左侧如果是星号表示当前单元格正在执行,是数字表示执行完毕

计算IBM指数

伪造数据

import random
# 伪造数据
h = []
w = []
for i in range(1000):
    h.append(random.randint(153,180))
    w.append(random.uniform(51,88))

 

python代码实现

import time
# for循环计算
start_time = time.time()
for i in range(100000000):
    w[i]/(h[i]/100) ** 2
end_time = time.time() - start_time
end_time

  numpy模块_python_02

 

numpy解决方案

import numpy as np
H = np.array(h)
W = np.array(w)
# 数组运算
start_time = time.time()
BMI = W/(H/100)**2
end_time = time.time() - start_time
end_time

  numpy模块_数据_03

 

多维数组

一维数组

np.array([1,2,3,4])

  numpy模块_数组_04

 

 

 

二维数组(矩阵)

np.array([[1,2,3,4],[9,8,7,6]])

  numpy模块_二维数组_05

 

 

 

numpy中同一个数组内所有数据的数据类型肯定是一致的

np.array([1,2,False]) >>> array([1, 2, 0])
np.array([1,2,3.1]) >>> array([1.,2.,3.1])

  numpy模块_二维数组_06

 

 

 

numpy中进行数据操作的时候同一个数组内所有的数据都挨个对应参与操作

a1 = np.array([1,2,3,4])
a2 = np.array([7,8,9,1])
a1 + a2 >>> array([ 8, 10, 12,  5])
	
a1 * 10 >>> array([10, 20, 30, 40])

  numpy模块_数组_07

 

数据类型

布尔型:bool_

 

整型

int_ int8 int16 int32 int64

int32表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数

 

无符号整型

uint8 uint16 uint32 uint64

 

浮点型

float_ float16 float32 float64

 

复数型

complex_ complex64 complex128

 

为什么numpy数据类型以数字居多

因为numpy主要用于科学计算,只有数字可以参与计算

 

为什么有些数据类型后面加下划线

因为为了跟python数据类型关键字区分开

 

 

常用属性

T 数组的转置(对高维数组而言)

li1 = [
      [1,2,3],
      [4,5,6]
  ] 
  a = np.array(li1)
  a.T

执行结果: array([[1, 4], [2, 5], [3, 6]])

就相当于将行变成列,列变成行,也是一个比较常用的方法

 numpy模块_二维数组_08

 

dtype

数组元素的数据类型

numpy模块_数据_09

 

size

数组元素的个数

numpy模块_数据类型_10

 

ndim

数组的维数

numpy模块_数组_11

 

shape

数组的维度大小(以元组形式)

numpy模块_数组_12

 

常用方法

如何查看某个方法的使用说明

方式一:

在方法后面加问号执行即可

方式二:

写完方法名之后先按shift不松开然后按tab即可(shift+tab)

 numpy模块_数据_13

 

array()

将列表转换为数组,可选择显示指定dtype

 

arange()

range的numpy版,支持浮点数

np.arange(1,10,2)
np.arange(1.2,10,0.4)

  numpy模块_数据类型_14

 

linspace()

类似arange(),第三个参数为数组长度

np.linspace(1,10,20)

这个方法与arange有一些区别,arange是顾头不顾尾,而这个方法是顾头又顾尾。

在1~10之间生成的二十个数字,每个数字之间的距离是相等的,前后两个数做减法肯定相等。

numpy模块_数据_15

 

zeros()

根据指定形状和dtype创建全0数组

np.zeros((3,4))

  numpy模块_二维数组_16

 

ones()

根据指定形状和dtype创建全1数组

np.ones((3,4))

  numpy模块_数据_17

 

empty()

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

np.empty(10)

  numpy模块_数据_18

 

eye()

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

np.eye(5)

numpy模块_python_19

 

索引与切片

针对一维数组

索引与切片操作跟python中的列表完全一致

age = np.array([13.,19,22,14,19,11])

花式索引(间断索引)

age[[0,2,5]] 

numpy模块_数据类型_20

 

布尔值索引(逻辑索引)

age[age>15]

  numpy模块_python_21

 

针对二维数组索引与切片有些许复杂

 

res[行索引(切片),列索引(切片)]

  

如果需要获取二维数组的所有行或列元素,那么对应的行索引或列索引需要用英文的冒号表示

 

 res = np.array([[ 1, 3, 5, 7],
       [ 2, 4, 6, 8],
       [ 11, 13, 15, 17],
       [ 12, 14, 16, 18],
       [100, 101, 102, 103]])

arr1[3,3]      # 18
arr1[3,:]      # array([12, 14, 16, 18])
arr1[:,1]      # array([  3,   4,  13,  14, 101])
arr1[0:2,1:3]  # array([[3,5],[4,6]])

  numpy模块_数据_22

 

运算符

数学运算符

+

数组对应元素的加和

-

数组对应元素的差

*

数组对应元素的乘积

/

数组对应元素的商

%

数组对应元素的余数

//

数组对应元素的整除数

**

数组对应元素的加幂指数

 

 

 

比较运算符

>

判断arr1的元素是否大于arr2的元素

等价  np.greater(arr1,arr2)

>=

判断arr1的元素是否大于等于arr2的元素

等价  np.greater_equal(arr1,arr2)

<

判断arr1的元素是否小于arr2的元素

等价np.less(arr1,arr2) 

<=

判断arr1的元素是否小于等于arr2的元素

等价np.less_equal(arr1,arr2) 

==

判断arr1的元素是否等于arr2的元素

等价np.equal(arr1,arr2)

!=

判断arr1的元素是否不等于arr2的元素

等价np.not_equal(arr1,arr2)

  

函数

常用的数学函数

np.round(arr)

对各元素四舍五入

numpy模块_数组_23

 

np.sqrt(arr)

计算各元素的算术平方根

numpy模块_数据类型_24

 

np.square(arr)

计算各元素的平方值

numpy模块_数据_25

 

np.exp(arr)

计算以e为底的指数

numpy模块_数据类型_26

 

np.power(arr, α)

计算各元素的指数

numpy模块_python_27

 

np.log2(arr)

计算以2为底各元素的对数

numpy模块_数组_28

 

np.log10(arr)

计算以10为底各元素的对数

numpy模块_二维数组_29

 

np.log(arr)

计算以e为底各元素的对数

 numpy模块_python_30

 

常用的统计函数(必会)

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)

按照轴的方向计算方差

 

注意:

axis=0时,计算数组各列的统计值

axis=1时,计算数组各行的统计值

 

不使用axis参数

计算每一行的和 

array([[ 80.5, 60., 40.1, 20., 90.7],
       [ 10.5, 30., 50.4, 70.3, 90.],
       [ 35.2, 35., 39.8, 39., 31.],
       [91.2, 83.4, 85.6, 67.8, 99.]])

# 计算每一行的和 Sum = [] for row in range(4): Sum.append(np.sum(arr2[row,:]))

  numpy模块_数据_31

 

计算每一列的平均值

Avg = []
for col in range(5):
    Avg.append(np.mean(arr2[:,col]))

  numpy模块_数据类型_32

 

使用axis参数

arr2.sum(axis = 1)  # 等价np.sum(arr2, axis = 1)
np.mean(arr2, axis = 0)  # 等价arr2.mean(axis = 0)

  numpy模块_二维数组_33

 

随机数

numpy中的random子模块

np.random

  

rand

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

numpy模块_python_34

 

randint

给定形状产生随机整数

numpy模块_二维数组_35

 

choice

给定形状产生随机选择

numpy模块_数据类型_36

 

shuffle

与random.shuffle相同

numpy模块_数据_37

 

uniform

给定形状产生随机数组(随机均匀分布)

numpy模块_二维数组_38

 

 

normal

随机正态分布

 numpy模块_二维数组_39