数据挖掘之Numpy详细了解

时间:2022-07-03 21:23:04

不是最全,但是也是很详细的练习,阅读时长可能过长,建议先收藏

(一) 定义


(1)官方文档:

NumPy is the fundamental package for scientific computing with Python. It contains among other things:

a powerful N-dimensional array object
sophisticated (broadcasting) functions
tools for integrating C/C++ and Fortran code
useful linear algebra, Fourier transform, and random number capabilities


(2)大概意思是:

一个用python实现的科学计算包。
1、一个强大的N维数组对象Array;
2、比较成熟的(广播)函数库;
3、用于整合C/C++和Fortran代码的工具包;
4、实用的线性代数、傅里叶变换和随机数生成函数。
5、numpy和稀疏矩阵运算包scipy配合使用更加方便

(二)使用概览

由于这里使用的函数比较多,故分了几个大模块进行练习,练习具体到使用每个函数

(一)使用numpy构建矩阵

(二)元素的获取

(三)各种数学函数

(四)统计函数

(五)映射函数

(六)离散与连续分布

(七)数据加载与导出

数据挖掘之Numpy详细了解

(三)具体使用

(一)使用numpy构建矩阵【array函数】

import numpy as np
""" 创建一维数组(列表或者元组),二维数组(嵌入的列表或元组) """
arr1 = np.array([1,3,5,6,7,9])
print(arr1)

arr2 = np.array((2,3,4,5,6,8,9))
print(arr2)

arr_two = np.array([[1,2,3,4,5],[2,3,4,5,6,7],[5,6,7,9]])
print(arr_two)

arr_two_2 = np.array([[2,3,4,5],[2,3,4,5],[5,6,7,9]])
print(arr_two_2)

运行结果:

数据挖掘之Numpy详细了解

需要注意的是arr_two返回的是一个list,里面的数组个数不一致,返回的便是每个list

(二)元素的获取【shape函数】

(1) 返回一个数组的行数与列数


""" 返回一个数组的行数和列数 """
arr1_shape = arr1.shape
arr2_shape = arr2.shape
arr_two_shape = arr_two.shape
arr_two_shape_2 = arr_two_2.shape
print('返回列表行数和列数********************')
print(arr1_shape,arr2_shape,arr_two_shape,arr_two_shape_2)

(2)使用索引的方式,获取元素

""" 元素的获取:使用索引的方式 行列的表示[行,列] """
print('元素的获取,使用索引的方式*******************')
print(arr_two_2,'\n')
# (1)获取二维数组的某列(这里获取第二列,列表索引下标从0开始)
print(arr_two_2[:,2],'\n')
# (2)获取二维数组的某行(这里获取第一行)
print(arr_two_2[1,:],'\n')
# (3)获取二维数组的某个元素
print(arr_two_2[2,3],'\n')

(3)获取列表矩阵

print("返回列表矩阵****************")
print(arr_two_2,'\n')

# 获取二维数组的某几行
print(arr_two_2[[0,2],:],'\n') # 获取二维数组的某几列 print(arr_two_2[:,[0,1,3]],'\n')
# 获取二维数组的某几行某几列元素(M3):这里得到的是一个一维数组
print(arr_two_2[[0,2],[2,3]],'\n')
# 获取二维数组的某几行某几列元素(M4): 这里得到的是一个2x2的矩阵
print(arr_two_2[np.ix_([0,2],[2,3])])

数据挖掘之Numpy详细了解

(三)各种数学函数

函数包括:绝对值,算数平方根,平方,指数,对数,符号函数,向上/下取整,返回最近的整数,幂运算

建议收藏后在PC端看,

print('******************* np 的其他相关数学函数 ************************* ')

# 绝对值
abs_template = [-3,-2,-1,0,1,2,3,4]
abs_np = np.abs(abs_template)
fabs_np = np.fabs(abs_template)
print(abs_template,abs_np,fabs_np)

# 算术平方根
sqrt_num = 25
sqrt = np.sqrt(sqrt_num)
print(sqrt)

# 平方
square_num = 4
square = np.square(square_num)
print(square)

# 指数
print('指数:')
exp_num = 6
exp = np.exp(exp_num)
print(exp)

# 对数
log_2 = np.log2(2)
log_10 = np.log10(10)
log_20 = np.log(20)
print(log_2,log_10,log_20)

# 符号函数 (大于0的返回1,小于0的返回-1,0返回0值)
sign_over = np.sign(2)
sign_below = np.sign(-2)
sign_zero = np.sign(0)
print(sign_over,sign_below,sign_zero)

# 向上取整
cell_num = np.ceil(5.4)
cell_num2 = np.ceil(-5.4)
cell_num3 = np.ceil(-5)
print(cell_num,cell_num2,cell_num3)

# 向下取整
floor_num1 = np.floor(5.6)
floor_num2 = np.floor(5.4)
floor_num3 = np.floor(-5.6)
print(floor_num1,floor_num2,floor_num3)

# 返回最近的整数
rint_num1 = np.rint(5.6)
rint_num2 = np.rint(5.2)
print(rint_num1,rint_num2)

# 判断是否缺失
print('是否缺失')
isnan_num = np.isnan((2,3,-1,1))
print(isnan_num)

# 判断是否无限:isfinite (有限:isinf)
isfinite_num = np.isfinite(np.math.log10(2))
print(isfinite_num)
isinf_num  = np.isinf(np.math.log(2,4))
print(isinf_num)

# 幂运算
power_num = np.power(2,3)
print(power_num)

# 余数运算
mod_num1 = np.mod(10,2)
mod_num2 = np.mod([12,14],3)
print(mod_num1,mod_num2)

数据挖掘之Numpy详细了解

(四)统计函数

余数运算,最大/小值,浮点最大/小值,求和,均值,标准差,方差,中位数

print('统计函数:')

# 最大值
arr_1 = [23,2344,435,54,66,7,99]
max_num = np.max(arr_1)
print(max_num)

# 浮点数最大值
fmax_num = np.fmax([1,4,9],[0,5,10])
print(fmax_num)

# 最小值
min_num = np.min(arr_1)
print(min_num)
# 浮点数的最小值(此处的比值为两个list集合一一对应进行比较,可查看numpy官方文档)
fmin_num = np.fmin([2,3,4],[1,5,3])
print(fmin_num)

# 求和
sum_num = np.sum([2,3,4,5])
print(sum_num)

# 均值
mean_num = np.mean([2,2,3,3,4,4])
print(mean_num)

# 标准差:样本平均数方差的开平方
#(两组数据平均值都相同的话,这时候标准差大的数据反而不好)
# 标准差是方差的算术平方根
std_num = np.std([2,2,3,3,4,4])
std_num2 = np.std([1,2,0,6,4,5])
print(std_num,std_num2)

# 方差
var_num = np.var([2,2,3,3,4,4])
var_num2 = np.var([1,2,0,6,4,5])
print(var_num,var_num2)

# 中位数:为奇数个时,X(n+1)/2 偶数个时:(X(n/2) + X(n/2+1))/2
median_num = np.median([2,2,3,3,4,4,5,5])
median_num2 = np.median([1,2,0,6,4,5])
print(median_num,median_num2)

数据挖掘之Numpy详细了解

(五)映射函数

#   映射函数   apply_along_axis
print('****************** 映射函数开始 *********************')
arr3 = np.array([[1,2,3,4],[5,6,7,8],[3,4,5,6]])
print(arr3,'\n')

# 对矩阵的每一行计算均值
mean_arrays = np.apply_along_axis(func1d=np.mean,axis=1,arr=arr3)
print(mean_arrays,'\n')

# 对矩阵的每一行进行求和计算
sum_arrays = np.apply_along_axis(func1d=np.sum,axis=1,arr=arr3)
print(sum_arrays,'\n')

数据挖掘之Numpy详细了解

(六)离散与连续分布

""" 随机数生成(常用的分布随机数):离散分布,连续分布 1 离散分布:二项分布,泊松分布 2 连续分布:正态分布(高斯分布),其他常用分布 """

# (一)二项分布 是n个独立的是/非试验中成功的次数的离散概率分布
# 设置随机种子,保证每次运行都出现相同的随机数
np.random.seed(123)
# 二项分布
r1 = np.random.binomial(n=10,p=0.2,size=20)
print(len(r1))
print(r1,'\n')

r2 = np.random.binomial(n=10,p=0.2,size=(3,5))
print(r2,'\n')

# 泊松分布(单位时间内随机事件发生的次数)
# 保证每次运行都会出现相同的随机数
np.random.seed(1)
poisson1 = np.random.poisson(lam=6,size=10)
print(poisson1,'\n')
poisson2 = np.random.poisson(lam=(10,50,20),size=(5,3))#lamda参数分别取10,50,20,表示单位时间内某件事发生的频次
print(poisson2,'\n')

# (二) 连续分布
# (1)正态分布

# 均值为2,标准差为3
normal = np.random.normal(loc=2,scale=3,size=10)
print(normal,'\n')

normal2 = np.random.normal(loc=2,scale=3,size=(3,5))
print(normal2)

# 其他分布(t分布,f分布,均匀分布,这里暂时不举例)

数据挖掘之Numpy详细了解

(七)数据加载与导出

# numpy模块数据加载
print('##################### numpy 模块数据加载 #####################')

# 数据写入
""" name:指定外部文件的路径 delimiter:指定文件中数据列的分隔符 skiprows:指定读数时跳过的行数 skip_header:指定跳过首行 usecols:指定读取的数据列 """
data_txt = np.loadtxt(fname='loadtxt.txt',delimiter=',',skiprows=1)
# 推荐第二种
data_txt2 = np.genfromtxt(fname='loadtxt.txt',delimiter=',',skip_header=1,usecols=[0,2])
print(data_txt,'\n')
print(data_txt2,'\n')

# 数据写出
""" fname:指定数据写出的路径 X:指定需要写出的数据 fmt:指定输出数据的格式,默认科学计算法 delimiter:指定数据列之间的分隔符,默认空格符 newline:指定新行的标识符,默认换行 header:指定输出数据首行值 footer:指定输出数据的末行值 comments:指定注释符,默认“#” """
input_data = '要写出的数据'
np.savetxt(fname='F:data.txt',X=input_data,fmt='%.18e',delimiter=' ',newline='\n',header='',footer='',comments='#')

这里建议先收藏,留着以后空闲时间进行练习,或者在使用NumPy的时候进行翻阅,PS:我练习这个练习了一个下午,所以文章有些长,代码里面的注释已经很详细了,就暂时不过多的写注释了。