numpy的应用
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format = 'svg'
# 前面导入并配置
# 通过array函数将list转换成ndarray
array1 = np.array([1, 2, 3, 4, 5], dtype='i4')
array1
# 元素个数
array1.size
# 维度
array1.ndim
# 形状
array1.shape
# 每个元素占用的内存空间(字节)
array1.itemsize
# 元素的数据类型
array1.dtype
# 整个数组占用的内存空间(字节)
array1.nbytes
# 通过arange函数指定取值范围创建ndarray
array2 = np.arange(1, 100, 2)
array2
# 通过linspace构造等差数列创建ndarray
array3 = np.linspace(-5, 5, 101)
array3
# 通过随机的方式创建ndarray对象
array4 = np.random.randint(60, 101, 15)
array4
# 生成十个0到1的小数的数组
array5 = np.random.random(10)
array5
# 创建二维数组
array6 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array6
array6.ndim # 2
# 用随机的方式创建二维数组
array7 = np.random.randint(60, 101, (5, 3))
array7
# 创建元素全为零的二维数组
array8 = np.zeros((4, 5), dtype='i4')
array8
# 通过full直接创建n行n列的以M为元素的二维数组
np.full((10, 10), 3)
# 创建单位矩阵
array9 = np.eye(10)
array9
# 将一维数组调形成二维数组
array10 = array4.reshape((5, 3))
array10
# 将数组扁平化处理(变成一维数组)
array11 = array10.flatten()
array11
# ndarray对象的tolist方法可以将数组变回成list
type(array11.tolist())
# 数组的切片
# 花式索引(fancy index)
array11[[1, 3, 9, -1, -1, 0, 0, 0]]
# 数组的关系运算会产生布尔数组
array11 >= 80
## 结果:array([False, True, False, True, True, True, False, False, False,True, True, False, True, True, True])
array11 % 2 != 0
# 布尔索引 数据筛选
array11[array11 >= 80]
# & 相当于Python中的and,但是作用于两个数组而不是两个布尔值
array11[(array11 % 2 != 0) & (array11 >= 80)]
# | 相当于Python中的or,但是作用于两个数组而不是两个布尔值
array11[(array11 % 2 != 0) | (array11 >= 80)]
# 切片操作
array11[3:8]
# 二维数组的花式索引
array6[[0, 1, 1, 2], [2, 0, 2, 1]]
array14 = np.random.randint(20, 51, 10)
array14
# 下四分位数
q1 = np.quantile(array14, 0.25)
# 中位数 - 百分之五十分位数
q2 = np.quantile(array14, 0.5)
# 上四分位数
q3 = np.quantile(array14, 0.75)
print(q1, q2, q3)
# 四分位距离
iqr = q3 - q1
# 将数组对象以pickle协议进行序列化(把对象变成了bytes最后写到文件中)
# 存档
array14.dump('aaa')
# 读档
array16 = np.load('aaa', allow_pickle=True)
array16
# 获取非零元素的索引
array17 = np.array([0, 1, 0, 2, 0, 0, 0, 3, 0])
array17[array17.nonzero()]
# 舍入
array18 = np.random.random(10) * 10
array18.round(2)