NumPy
1.1 简介
"""
NumPy -- Numerical Python
是一个运行速度非常快的数学库, 主要用于数组计算
提供了更加精确的数据类型,使其具备了构造复杂数据类型的能力
主要功能:
1. 高性能科学计算和数据分析的基础包
2. ndarray 多维数组, 具有矢量运算能力 快速 节省空间
3. 矩阵运算 无序循环 可完成类似Matlab中矢量运算
4. 用于读写磁盘数据的工具 以及 用于操作内存映射文件的工具
"""
1.2 属性
"""
属性:
ndarray.ndim -- 数组的轴个数
ndarray.shape -- 数组的维度
ndarray.size -- 数组的元素个数
ndarray.dtype -- 数组的元素的数据类型
ndarray.itemsize -- 数组的元素占用字节数
"""
import numpy as np
arr = np.arange(15).reshape(3,5)
print(f'数组中的元素信息: {arr}')
print(f'数组的轴个数: {arr.ndim}')
print(f'数组的维度: {arr.shape}')
print(f'数组的元素个数: {arr.size}')
print(f'数组的元素的数据类型: {arr.dtype}')
print(f'数组的元素占用字节数: {arr.itemsize}')
1.3 创建多维数组
"""
ndarray:
是一个多维的数组对象(矩阵)
具有矢量算数运算能力和复杂的广播能力,并且 执行速度快 节省空间
下标从 0 开始, 数组中的元素必须是相同类型
"""
arr = np.array([2, 3, 4])
print('数组arr元素类型: ', arr)
print('数组arr类型:', arr.dtype)
"""
zeros() -- 创建一个全是 0 的数组
ones() -- 创建一个全是 1 的数组
empty() -- 创建一个内容 随机 的数组, 默认创建的数组类型是float64
arange() -- 创建一个 一维数组
matrix() -- 创建一个 二维数组, 只能生成2维数组
random.rand() -- 生成随机多维浮点型数据, 固定区间 0.0 ~ 1.0
random.randint() -- 生成随机多维整形数据, 可指定区间(1, 5)
random.uniform() -- 生成随机多维浮点型数据, 可指定区间(1, 5)
astypre() -- 转换数组中数据的数据类型
logspace() -- 等比数列
linspace() -- 等差数列
"""
zero_arr = np.zeros((3, 4))
print('数组 zero_arr: ')
print(zero_arr)
one_arr = np.ones((2, 3, 4))
print('数组 one_arr: ')
print(one_arr)
empty_array = np.empty((2, 3))
print('数组 empty_array: ')
print(empty_array)
np_arange = np.arange(10, 20, 5,dtype=int)
print(f"arange创建np_arange: {np_arange}")
mt = np.matrix("1 2;3 4")
print(f"matrix创建mt: {mt}")
arr = np.random.rand(3, 4)
print(arr)
arr = np.random.randint(-1, 5, size=(3, 4))
print(arr)
arr = np.random.uniform(-1, 5, size=(3, 4))
print(arr)
zeros_float_arr =np.zeros((3,4),dtype=np.float64)
print(zeros_float_arr)
print(zeros_float_arr.dtype)
zeros_int_arr = zeros_float_arr.astype(np.int64)
print(zeros_int_arr)
print(zeros_int_arr.dtype)
arr = np.logspace(0,0,10)
print(arr)
arr = np.logspace(0,5,6, base=2)
print(arr)
1.4 基本函数
"""
基本函数
ceil() -- 向上最接近的整数 参数是 number 或 array
floor() -- 向下最接近的整数 参数是 number 或 array
rint() -- 四舍五入 参数是 number 或 array
isnan() -- 判断元素是否为 NaN(Not a Number) 参数是 number 或 array
multiply() -- 元素相乘 参数是 number 或 array
divide() -- 元素相除 参数是 number 或 array
abs() -- 元素的绝对值 参数是 number 或 array
where(condition, x, y) -- 三元运算符 x if condition else y
"""
"""
统计函数
mean(), sum() --所有元素的平均值 所有元素的和 参数是 number 或 array
max(), min() --所有元素的最大值 所有元素的最小值 参数是 number 或 array
std(), var() --所有元素的标准差 所有元素的方差 参数是 number 或 array
argmax(), argmin() --最大值的下标索引值 最小值的下标索引值 参数是 number 或 array
cumsum(), cumprod() --返回一个一维数组 每个元素都是之前所有元素的 累加和 和 累乘积 参数是 number 或 array
"""
arr = np.arange(12).reshape(3, 4)
print(f'数组中元素: {arr}')
print(f'数组的按列统计和: {np.sum(arr, axis = 0)}')
print(f'数组的按行统计和: {np.sum(arr, axis = 1)}')
"""
假如我们想要知道矩阵a和矩阵b中所有对应元素是否相等 我们需要使用all方法
假如我们想要知道矩阵a和矩阵b中对应元素是否有一个相等 我们需要使用any方法。
any(): 至少有一个元素满足指定条件 返回True
all(): 所有的元素满足指定条件 返回True
unique(): 找到唯一值并返回排序结果 类似于Python的set集合
sort(): 排序函数
"""
arr = np.random.randn(2, 3)
print(arr)
print(np.any(arr > 0))
print(np.all(arr > 0))
arr = np.array([1, 2, 34, 5])
print("原数组arr:", arr)
sort_arr = np.sort(arr)
print("numpy.sort()函数排序后的数组:", sort_arr)
arr.sort()
print("数组.sort()方法排序:", arr)
1.5 基本运算
"""
基本运算:
两个ndarray, 一个是arr_a 另一个是arr_b
它们俩之间进行 arr_a + arr_b 或 arr_a - arr_b 或 arr_a * arr_b 这样计算的前提是 shape相同
计算的时候, 位置对应的元素 进行 加减乘除的计算, 计算之后得到的结果的shape 跟arr_a /arr_b 一样
"""
a = np.array([20, 30, 40, 50])
b = np.arange(4)
c = a - b
print("数组a:", a)
print("数组b:", b)
print("数组运算a-b:", c)
print('*' * 30)
"""
矩阵运算
前提:
arr_a 列数 != arr_b 列数
arr_a 列数 = arr_b 行数
函数:
arr_a.dot(arr_b)
"""
x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.array([[6, 23], [-1, 7], [8, 9]])
print("数组x:", x)
print("数组y:", y)
print("数组运算x.dot(y):", x.dot(y))
print("数组运算dot(x, y):", np.dot(x, y))