数据挖掘之Numpy详细了解

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

(一) 定义


(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)
数学函数

(四)统计函数

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

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)

统计函数

(五)映射函数

#   映射函数   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')

映射函数

(六)离散与连续分布

"""
随机数生成(常用的分布随机数):离散分布,连续分布
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模块数据加载
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:我练习这个练习了一个下午,所以文章有些长,代码里面的注释已经很详细了,就暂时不过多的写注释了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容