简介
Numpy 是高性能科学计算和数据分析的基础包。它也是 pandas 等其他数据分析的工具的基础,基本所有数据分析的包都用过它。
NumPy 为 Python 带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。
它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在 Python 级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度
安装
pip install numpy
引用
import numpy as np
这是官方认证的导入方式,可能会有人说为什么不用
from numpy import *
,是因为在numpy 当中有一些方法与 Python 中自带的一些方法,例如max
、min
等冲突,为了避免这些麻烦大家就约定俗成的都使用这种方法。
为啥使用 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 个随机浮点数