数据处理与统计分析 —— numpy入门
目录
概述
属性
创建ndarray
zeros() /ones()/empty()
arange ()
matrix ()
创建随机数矩阵
转换数据类型
等比/等差数列
Numpy内置函数
基本函数
统计函数
比较函数
去重函数
排序函数
-
概述
- NumPy(Numerical Python)是Python数据分析必不可少的第三方库
- 重要功能
- 1. 高性能科学计算和数据分析的基础包
- 2. ndarray,多维数组,具有矢量运算能力,快速、节省空间
- 3. 矩阵运算,无需循环,可完成类似Matlab中的矢量运算
- 4. 用于读写磁盘数据的工具以及用于操作内存映射文件的工具
-
属性
-
- ndarray.ndim 数组的维度,几维数组返回的就是几
- ndarray.shape 返回几行几列
- ndarray.size 返回元素个数
- ndarray.dtype 返回元素类型
- ndarray.itemsize 返回每个元素的字节数
# 创建一个二维数组 import numpy as np arr = np.array([[1,2,3],[4,5,6]]) print(f"ndarray对象:{arr}") print(f"ndarray对象维度:{arr.ndim}") print(f"ndarray对象元素个数:{arr.size}") print(f"ndarray对象元素类型:{arr.dtype}")
-
创建ndarray
- 普通创建array()
-
import numpy as np arr = np.array([1.0,2.0,3.0,4.0,5.0]) print(f"数组{arr}")
-
-
zeros() /ones()/empty()
- 函数zeros()创建一个全是0的数组
# zeros()函数创建全0数组 import numpy as np arr = np.zeros((2,3)) print(f"数组:\n{arr}")
- 函数ones()创建一个全1的数组
# ones()函数创建全1数组 import numpy as np arr = np.ones((2,3)) print(f"数组:\n{arr}")
# ones()函数创建全1数组 import numpy as np # 创建三维数组,2个数组,每个数组3行4列 arr = np.ones((2,3,4)) print(f"数组:\n{arr}") print(f"数组类型{type(arr)}") print(f"数组维度{arr.ndim}") print(f"数组元素个数{arr.size}") print(f"数组元素类型:{arr.dtype}")
-
- 函数empty()创建一个内容随机并且依赖于内存状态的数组。
- 默认创建的数组类型(dtype)都是float64
-
# empty()函数创建数组,内容随机,依赖内存状态的随机值 import numpy as np arr = np.empty((2,3)) print(f"数组:\n{arr}") print(f"数组类型{type(arr)}") print(f"数组维度{arr.ndim}") print(f"数组元素个数{arr.size}") print(f"数组元素类型:{arr.dtype}")
-
arange ()
arange() 类似python 的 range() ,创建一个一维 ndarray 数组。
# 生成一个1到5的数组(不包含5),步长为2,数据类型为int32
import numpy as np
arr = np.arange(1,5,2,dtype=np.int32)
print(f"数组:\n{arr}")
print(f"数组类型{type(arr)}")
print(f"数组维度{arr.ndim}")
print(f"数组元素个数{arr.size}")
print(f"数组元素类型:{arr.dtype}")
matrix ()
matrix 是 ndarray 的子类,只能生成 2 维的矩阵
# matrix()创建一个矩阵
import numpy as np
arr = np.matrix('1 2;3 4')
arr2 = np.matrix('1,2;3,4')
arr3 = np.matrix([[1,2],[3,4]])
print(f"数组:{arr}")
print(f"数组:{arr2}")
print(f"数组:{arr3}")
运行结果:
创建随机数矩阵
函数:rand(); randint(); uniform()
# rand()函数创建随机数矩阵(浮点数)
# 创建一个二维数组,2行3列,元素随机,范围0-1(规定)
import numpy as np
arr = np.random.rand(2,3)
print(f"数组:\n{arr}")
# randint()函数创建随机数矩阵(整数)
import numpy as np# 创建一个二维数组,2行3列,元素随机,范围2-7
arr = np.random.randint(2,8,size=(2,3))
print(f"数组:\n{arr}")
print(f"数组类型{type(arr)}")
print(f"数组元素类型:{arr.dtype}")
# 随机生成矩阵(浮点数、范围可自定义)
import numpy as np
arr = np.random.uniform(1,5,size=(2,5))
print(f"数组:\n{arr}")
print(f"数组类型{type(arr)}")
print(f"数组元素个数{arr.size}")
print(f"数组元素类型:{arr.dtype}")
转换数据类型
import numpy as np
arr = np.random.uniform(1,5,size=(2,5))
print(f"数组:\n{arr}")
print(f"数组类型{type(arr)}")
print(f"数组元素类型:{arr.dtype}")arr1 = arr.astype(np.int32)
print(f"数组:\n{arr1}")
print(f"数组类型{type(arr1)}")
print(f"数组元素类型:{arr1.dtype}")
等比/等差数列
等比数列
# 等比数列
# a = np.logspace(0,0,10)
# 第一个1:起始值的指数(10⁰)
# 第2个10:结束值的指数(10⁰)
# 第3个10:生成10个数
import numpy as np
a = np.logspace(0,0,10)
print(a)
# 等比数列
# a = np.logspace(0,9,10,base = 2)
# 第1个0:起始值的指数
# 第2个9:结束值的指数
# 第3个10:生成10个数
# 第4个base = 2:指定生成数列的基数import numpy as np
a = np.logspace(0,9,10,base = 2)
print(a)
等差数列
# 第2个10:结束值
# 第3个10:生成10个数
a1 = np.linspace(0,10,10, endpoint= False) # 不包含结束值
"""
步长计算:(终止值 -起始值)/(元素的个数-1)=1.0
元素的计算:起始值 + 步长 *(索引值0~9)
1+1.0*0=1
1+1.0*1=2
1+1.0*2=3
"""
a2 = np.linspace(0,10,11, endpoint= True) # 包含结束值
"""
步长计算:(终止值 - 起始值)/(元素的个数)=(10-1)/10 =0.9
实际区间:数学表示为[1,10]
终点的计算:起始值 +步长*(元素的个数-1)=1+0.9*9=9.1
实际区间:[1,9.1)
元素的计算:起始值 +步长 *(索引值0~9)
1+0.9*0=1
1+0.9*1=1.9
1+0.9*2=2.8
1+0.9*9=9.1
"""
print(a1)
print(a2)
Numpy内置函数
基本函数
np.ceil(): 向上最接近的整数,参数是 number 或 array
np.floor(): 向下最接近的整数,参数是 number 或 array
np.rint(): 四舍五入,参数是 number 或 array
np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array
np.multiply(): 元素相乘,参数是 number 或 array
np.divide(): 元素相除,参数是 number 或 array
np.abs():元素的绝对值,参数是 number 或 array
np.where(condition, x, y): 三元运算符,x if condition else y
import numpy as np# 生成随机数组
arr = np.random.randn(2, 3)
print(f"原始数组:\n{arr}\n")# 取整操作
print(f"向上取整 (ceil):\n{np.ceil(arr)}\n")
print(f"向下取整 (floor):\n{np.floor(arr)}\n")
print(f"四舍五入 (rint):\n{np.rint(arr)}\n")# 特殊值检查
print(f"检查NaN值:\n{np.isnan(arr)}\n")# 数组运算
print(f"元素相乘 (multiply):\n{np.multiply(arr, arr)}\n")
print(f"元素相除 (divide):\n{np.divide(arr, arr)}\n")# 条件判断
print(f"条件赋值 (where):\n{np.where(arr > 0, 1, -1)}")
运行结果:
原始数组:
[[-0.77870842 1.6587777 1.09137868][ 0.54180519 -1.51279888 0.74223392]]向上取整 (ceil):
[[-0. 2. 2.][ 1. -1. 1.]]向下取整 (floor):
[[-1. 1. 1.][ 0. -2. 0.]]四舍五入 (rint):
[[-1. 2. 1.][ 1. -2. 1.]]检查NaN值:
[[False False False][False False False]]元素相乘 (multiply):
[[0.60638681 2.75154347 1.19110743][0.29355286 2.28856046 0.55091119]]元素相除 (divide):
[[1. 1. 1.][1. 1. 1.]]条件赋值 (where):
[[-1 1 1][ 1 -1 1]]
统计函数
np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array
np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array
np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array
np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array
np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array
import numpy as np
arr = np.arange(12).reshape(3,4) # 3行4列的二维数组
print(f"数组:{arr}")# 2: 演示cumsum(),累加和
print(f"累加和:{np.cumsum(arr)}") # 累加和:[ 0 1 3 6 10 15 21 28 36 45 55 66]# 3: 演示sum(), 所有元素的和
print(f"所有元素的和:{np.sum(arr)}") # 所有元素的和:66
print(f"所有元素的按列求和:{np.sum(arr, axis=0)}") # 所有元素的按列求和:[12 15 18 21]
print(f"所有元素的按行求和:{np.sum(arr, axis=1)}") # 所有元素的按行求和:[ 6 22 38]
运行结果:
比较函数
np.any(): 至少有一个元素满足指定条件,返回True
np.all(): 所有的元素满足指定条件,返回True
import numpy as np
arr = np.random.randn(2, 3)
print(f"数组:{arr}")print(f"至少有一个元素满足指定条件:{np.any(arr > 0)}")
print(f"所有的元素满足指定条件:{np.all(arr > 0)}")
运行结果:
去重函数
np.unique():找到唯一值并返回排序结果,类似于Python的set集合
import numpy as np
arr = np.array([[1, 2, 1, 6], [1, 3, 2,5]]) # 列数需要一致
print(f"数组:{arr}")# 2:去重
print(f"去重:{np.unique(arr)}")
运行结果:
排序函数
方式1:np.sort(arr):排序,并返回排序后的结果
方式2:arr.sort():排序,并修改原数组
import numpy as np
# 1:创建nparray对象
arr = np.array([1, 5, 3, 2, 6])
print(f"数组:{arr}")# 2: 排序
arr_new = np.sort(arr)
print(f"排序后的结果:{arr_new}")# 3:排序修改原数组
arr.sort() # 直接对原数组对象进行排序
print(f"排序后的结果:{arr}")
运行结果: