NumPy

简介

Numpy 是高性能科学计算和数据分析的基础包。它也是 pandas 等其他数据分析的工具的基础,基本所有数据分析的包都用过它。

NumPy 为 Python 带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。

它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在 Python 级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度

安装

pip install numpy

引用

import numpy as np

这是官方认证的导入方式,可能会有人说为什么不用from numpy import *,是因为在numpy 当中有一些方法与 Python 中自带的一些方法,例如maxmin等冲突,为了避免这些麻烦大家就约定俗成的都使用这种方法。



为啥使用 numpy

import numpy as np
shop_car   = [12,2,3,6,4]  ### 购物车商品数量
shop_price = [10,23,5,40,10]  ### 商品对应的价格

### 求一下,商品的总价格?
shop_car_np = np.array(shop_car)   ### ndarray 一维数组
shop_car_np

array([12, 2, 3, 6, 4])

shop_price_np = np.array(shop_price)
shop_price_np

array([10, 23, 5, 40, 10])

shop_car_np * shop_price_np

array([120, 46, 15, 240, 40])

sum(shop_car_np * shop_price_np)

461

shop_car_np * 3

array([36, 6, 9, 18, 12])


创建 ndarry

arr = np.array([1,2,3,3,5])
arr  #### ndarray 一维数组

array([1, 2, 3, 3, 5])

arr2 =  np.array([ [1,2,3,4], [5,6,7,8],[1,2,3,4] ])
arr2   #### ndarray 二维数组  2行4列数组
array([[1, 2, 3, 4],
       [5, 6, 7, 8],
       [1, 2, 3, 4]])

常见属性

属性 描述
T 数组的转置(对高维数组而言)
dtype 数组元素的数据类型
size 数组元素的个数
ndim 数组的维数
shape 数组的维度大小(以元组形式)
arr

array([1, 2, 3, 3, 5])

arr.dtype   #### 数组元素的类型

dtype('int64')

arr.size  ### 数组元素的个数

5

arr.shape  #### 数组的维度,以元组的形式表示

(5,)

arr.ndim  ### 数组的维度,以整数的形式表示

1

arr2
array([[1, 2, 3, 4],
       [5, 6, 7, 8],
       [1, 2, 3, 4]])
arr2.shape

(3, 4)

arr2.ndim

2

arr2.T   #### 转置  把行变成列,把列变成行  对于高维数组而言
array([[1, 5, 1],
       [2, 6, 2],
       [3, 7, 3],
       [4, 8, 4]])
arr.dtype

dtype('int64')

arr

array([1, 2, 3, 3, 5])

arr.astype('float')  ####  astype() 强制转换一个数组的数据类型

array([1., 2., 3., 3., 5.])


数据类型

类型 描述
布尔型 bool_
整型 int_ int8 int16 int32 int 64
无符号整型 uint8 uint16 uint32 uint64
浮点型 float_ float16 float32 float64
复数型 complex_ complex64 complex128
整型:
int32只能表示(-2**31,2**31-1),因为它只有32个位,只能表示2**32个数

无符号整型:
只能用来存正数,不能用来存负数

补充:
astype()方法可以修改数组的数据类型

ndarry 的创建方式

方法 描述
array() 将列表转换为数组,可选择显式指定dtype
arange() range的numpy版,支持浮点数
linspace() 类似arange(),第三个参数为数组长度
zeros() 根据指定形状和dtype创建全0数组
ones() 根据指定形状和dtype创建全1数组
empty() 根据指定形状和dtype创建空数组(随机值)
eye() 根据指定边长和dtype创建单位矩阵
arr = np.array([1,2,3,4,5,6])
arr2 = np.arange(10)
arr2

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.arange?   #### ?的作用是查看当前函数的使用方法 
arr = np.arange(0, 10, 2)
arr

array([0, 2, 4, 6, 8])

np.linspace(2,10, num=5, endpoint=False)  # endpoint 不包含最后一个

array([2. , 3.6, 5.2, 6.8, 8.4])

np.zeros(10)

array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

np.ones(10)

array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

np.empty([2,4])
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.]])
np.eye(5, dtype=int)   #### 对称矩阵
array([[1, 0, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 1, 0],
       [0, 0, 0, 0, 1]])
arr

array([1, 2, 3, 4, 5, 6])

arr.reshape(2,3)  #### reshape将一维数组转换成二维数组
array([[1, 2, 3],
       [4, 5, 6]]

索引

arr

array([1, 2, 3, 4, 5, 6])

arr[3]  ### 一维数组中的索引下边也是从0开始,取值的方式和python中的列表是一样的

4

arr2 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
arr
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
arr2[0,1]  #### ,号前面是行索引,后面是列索引

2

arr2[0][1]  ### 第一个是行索引,第二个是列索引

2


切片

arr

array([1, 2, 3, 4, 5, 6])

arr[0:4]   # 第一个到第四个

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

arr[:]   # 全部取出

array([1, 2, 3, 4, 5, 6])

arr[2:]   # 第二个到最后一个

array([3, 4, 5, 6])

arr[:4]   # 第一个到第四个

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

arr[::-1]   # 反转

array([6, 5, 4, 3, 2, 1])

总结:一维数组的切片和列表中的切片用法完全一样

arr2
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
arr2[0:2,1:3]  ### ,号的前面截取的是行 ,后面截取的是列
array([[2, 3],
       [6, 7]])

arr2[:, :2]  # 所有的行取到第二列
array([[ 1,  2],
       [ 5,  6],
       [ 9, 10]])

数组向量运算和矢量运算

两个数组之间是可以进行 size 运算的

shop_car_np 
shop_price_np

array([12, 2, 3, 6, 4])

array([10, 23, 5, 40, 10])

shop_car_np + shop_price_np

array([22, 25, 8, 46, 14])


shop_car_np * 4

array([48, 8, 12, 24, 16])


布尔型索引

arr

array([1, 2, 3, 4, 5, 6])

需求:得到大于 4 的所有值

arr > 4

array([False, False, False, False, True, True])


arr[arr>4]  #### 可以将布尔型的结果当成索引传入到数组中,最终获取对应的True的值

array([5, 6])


花式索引

arr

array([1, 2, 3, 4, 5, 6])

返回一个包含[2,4,5]的数组的值

arr[ [1,3,4] ]   #### 索引中套列表,内层列表的值是想取得值的对应索引下标

array([2, 4, 5])


一元函数

函数 功能
abs、fabs 分别是计算整数和浮点数的绝对值
sqrt 计算各元素的平方根
square 计算各元素的平方
exp 计算各元素的指数e**x
log 计算自然对数
sign 计算各元素的正负号
ceil 计算各元素的ceiling值
floor 计算各元素floor值,即小于等于该值的最大整数
rint 计算各元素的值四舍五入到最接近的整数,保留dtype
modf 将数组的小数部分和整数部分以两个独立数组的形式返回,与Python的divmod方法类似
isnan 计算各元素的正负号
isinf 表示那些元素是无穷的布尔型数组
cos,sin,tan 普通型和双曲型三角函数
np.abs(-4.5)

4.5


np.sqrt(4)  # 平方根

2.0


np.square([2,3,4,5])  # 平方

array([ 4, 9, 16, 25])


np.exp(3)  # e**3 

20.085536923187668


np.log(20)

2.995732273553991


np.ceil(4.3)  #### 向上取整

5.0


np.floor(4.6)  ### 向下取整

4.0


np.rint(4.3)  ### 四设五入

4.0


np.modf(5.6)

(0.5999999999999996, 5.0)


np.isnan() ### is 判断 nan :数据分析领域特定一个数据类型 not a number 不是一个数

np.nan == np.nan

Flase


type(np.nan)

float


数学统计爱函数

sum 求和
cumsum 求前缀和
mean 求平均数
std 求标准差
var 求方差
min 求最小值
max 求最大值
argmin 求最小值索引
argmax 求最大值索引
arr

array([1, 2, 3, 4, 5, 6])

np.cumsum(arr)

array([ 1, 3, 6, 10, 15, 21])

np.mean(arr)  ### 平均数

3.5

np.var(arr)  #### 方差:((1-3.5)**2 + (2-3.5)**2 +) / 5

2.9166666666666665

np.std(arr) ### 方差开根号  得到标准差

1.707825127659933


随机数生成

函数 功能
rand 给定形状产生随机数组(0到1之间的数)
randint 给定形状产生随机整数
chocie 给定形状产生随机选择
shuffle 与random.shuffle相同
uniform 给定形状产生随机数组
np.random.rand(10) ### 随机生成10个0-1之间的数
array([0.62673264, 0.72358427, 0.84585648, 0.90063347, 0.12527228,
       0.49181793, 0.28931806, 0.6536062 , 0.14515325, 0.09002512])

np.random.randint(0,10)  ### 生成一个0-10之间的随机整数

5


np.random.choice(5,3)  ### 生成三个0-5之间的数

array([3, 2, 0])


arr

array([1, 2, 3, 4, 5, 6])

np.random.shuffle(arr)
arr

array([1, 2, 3, 4, 6, 5])


np.random.uniform(-1,0,1000)  # -1 到 0 直接 1000 个随机浮点数
原文地址:https://www.cnblogs.com/kai-/p/12605456.html