python科学计算三剑客_1-python数据分析-数据分析介绍、数据分析三剑客之NumPy

数据分析三剑客

numpy

pandas(重点)

matplotlib

numpy模块

NumPy(Numerical Python) 是 Python 语言中做科学计算的基础库。侧重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。

重点

numpy数组的创建

numpy索引和切片

级联

变形

矩阵的乘法和转置

常见的聚合函数+统计

numpy的创建

使用np.array()创建

使用plt创建

使用np的routines函数创建

使用np.array()创建

#用array()创建一个一维数组

importnumpy as np

np.array([1,2,3,4,5]) #array([1, 2, 3, 4, 5])

#使用array()创建一个多维数组

np.array([[1,2,3],[4,5,6]])

array([[1, 2, 3],

[4, 5, 6]])

数组和列表的区别是什么?

数组中存储的数据元素类型必须是统一类型

优先级:

字符串 > 浮点型 > 整数

np.array([1.1,'哈哈',11]) #array(['1.1', '哈哈', '11'], dtype='

np.array([1,5,6.1,8]) #array([1. , 5. , 6.1, 8. ])

将外部的一张图片读取加载到numpy数组中,然后尝试改变数组元素的数值查看对原始图片的影响

importmatplotlib.pyplot as plt#imread可以返回一个numpy数组

img_arr = plt.imread('./1.jpg')#将返回的数组的数据进行图像的展示

plt.imshow(img_arr) #imshow也可以将一个二维数组进行图片展示规

plt.imshow(img_arr + 100)

zeros()、ones()、linespace()、arange()、random系列

#ones zeros()与ones()相似

np.ones(shape=(3,4)) #返回一个3行4列的np数组,元素都是1., zeros是0.

array([[1., 1., 1., 1.],

[1., 1., 1., 1.],

[1., 1., 1., 1.]])#linspace返回一维形式的等差数列 开始 ,结束,一共8个元素

np.linspace(0, 50, num=8)

array([ 0. ,7.14285714, 14.28571429, 21.42857143, 28.57142857,35.71428571, 42.85714286, 50. ])#arange返回一维形式的等差数列

np.arange(0,50,5)

array([ 0,5, 10, 15, 20, 25, 30, 35, 40, 45])#random.randint 返回指定形状的随机整数数组

np.random.randint(0,20,size=(4,5))

array([[3, 1, 16, 14, 1],

[18, 13, 10, 14, 18],

[19, 19, 1, 8, 13],

[15, 2, 17, 15, 6]])#random.random 随机范围0-1

np.random.random(size=(2, 2))

array([[0.16654448, 0.59399791],

[0.6076535 , 0.89254046]])

numpy的常用属性

shape 形状

ndim 维度

size 元素总个数

dtype 元素的数据类型

img_arr.shape #返回数组形状

(500, 500, 3)

img_arr.ndim#返回数组维度

3img_arr.size#返回数组元素总个数

750000img_arr.dtype#返回数组元素的数据类型

dtype('uint8')

type(img_arr)#返回数组的数据类型

numpy.ndarray

numpy的数据类型

array(dtype=?):可以设定数据类型

arr.dtype = '?':可以修改数据类型

arr.astype('?'):也可以修改数据类型

修改数据类型

arr = np.array([1,2,3], dtype='float16')

array([1., 2., 3.], dtype=float16)#1、修改arr元素的数据类型

arr.astype('int8')

array([1, 2, 3], dtype=int8)#2、修改arr元素的数据类型

arr.dtype='float16'array([1., 2., 3.], dtype=float16)

numpy的索引和切片操作(重点)

索引取值操作

索引取值操作和列表同理

arr = np.random.randint(0,100,size=(5,6))

array([[21, 36, 62, 40, 52, 54],

[91, 45, 40, 35, 17, 98],

[48, 49, 36, 59, 47, 36],

[80, 66, 77, 21, 1, 80],

[18, 32, 55, 0, 32, 12]])

arr[3][4]1arr[0,4]52

切片操作

切出前两行数据

切出前两列数据

切出前两行的前两列的数据

数组数据翻转

练习:将一张图片上下左右进行翻转操作

练习:将图片进行指定区域的裁剪

#切出数组的前两行的数据

arr[0:2]

array([[21, 36, 62, 40, 52, 54],

[91, 45, 40, 35, 17, 98]])#切出数组的前两列

arr[:,0:2]

array([[21, 36],

[91, 45],

[48, 49],

[80, 66],

[18, 32]])#切出数组前两行的前两列

arr[0:2, 0:2]

array([[21, 36],

[91, 45]])#将数组行倒置

arr[::-1]

array([[18, 32, 55, 0, 32, 12],

[80, 66, 77, 21, 1, 80],

[48, 49, 36, 59, 47, 36],

[91, 45, 40, 35, 17, 98],

[21, 36, 62, 40, 52, 54]])#将数组列倒置

arr[::,::-1]

array([[54, 52, 40, 62, 36, 21],

[98, 17, 35, 40, 45, 91],

[36, 47, 59, 36, 49, 48],

[80, 1, 21, 77, 66, 80],

[12, 32, 0, 55, 32, 18]])#将数组进行行列导倒置

arr[::-1,::-1]

array([[12, 32, 0, 55, 32, 18],

[80, 1, 21, 77, 66, 80],

[36, 47, 59, 36, 49, 48],

[98, 17, 35, 40, 45, 91],

[54, 52, 40, 62, 36, 21]])

将图片进行翻转

importmatplotlib.pyplot as plt

img_arr= plt.imread('./1.jpg')

plt.imshow(img_arr)

img_arr.shape

(500, 500, 3) #前俩个是图片像素,最后一个是颜色维度

#将图片左右翻转

plt.imshow(img_arr[:,::-1,:])#将图片上下翻转

plt.imshow(img_arr[::-1])#上下左右颜色都倒置

plt.imshow(img_arr[::-1,::-1,::-1])#图片的裁剪:将脸部数据裁剪下来

plt.imshow(img_arr[30:300,140:330,:])

变形 reshape

注意:变形前和变形后数组的容量不可以发生变化

arr.shape

(5, 6)#将二维数组变形成一维数组 reshape()

arr_1 = arr.reshape((30,)) #原数组一共有30个元素,所以这里必须是30

array([21, 36, 62, 40, 52, 54, 91, 45, 40, 35, 17, 98, 48, 49, 36, 59, 47,36, 80, 66, 77, 21, 1, 80, 18, 32, 55, 0, 32, 12])#将一维数组变多维

arr_1 = arr.reshape((3,10)) #给定一个值另一个可以用-1自动计算

array([[21, 36, 62, 40, 52, 54, 91, 45, 40, 35],

[17, 98, 48, 49, 36, 59, 47, 36, 80, 66],

[77, 21, 1, 80, 18, 32, 55, 0, 32, 12]])

arr_1= arr.reshape((-1,10))

arr_1= arr.reshape((3,-1))

array([[21, 36, 62, 40, 52, 54, 91, 45, 40, 35],

[17, 98, 48, 49, 36, 59, 47, 36, 80, 66],

[77, 21, 1, 80, 18, 32, 55, 0, 32, 12]])

级联操作 concatenate

级联的操作意义:将多个numpy数组进行横向或者纵向拼接

axis轴向的理解

0:列 y轴方向,竖直方向

1:行 x轴方向,水平方向

问题:

级联的两个数组维度一样,但是行列个数不一样会如何?

#axis=0列和列进行拼接,axis=1行和行进行拼接

np.concatenate((arr,arr),axis=1)

array([[21, 36, 62, 40, 52, 54, 21, 36, 62, 40, 52, 54],

[91, 45, 40, 35, 17, 98, 91, 45, 40, 35, 17, 98],

[48, 49, 36, 59, 47, 36, 48, 49, 36, 59, 47, 36],

[80, 66, 77, 21, 1, 80, 80, 66, 77, 21, 1, 80],

[18, 32, 55, 0, 32, 12, 18, 32, 55, 0, 32, 12]])

np.concatenate((arr,arr),axis=0)

array([[21, 36, 62, 40, 52, 54],

[91, 45, 40, 35, 17, 98],

[48, 49, 36, 59, 47, 36],

[80, 66, 77, 21, 1, 80],

[18, 32, 55, 0, 32, 12],

[21, 36, 62, 40, 52, 54],

[91, 45, 40, 35, 17, 98],

[48, 49, 36, 59, 47, 36],

[80, 66, 77, 21, 1, 80],

[18, 32, 55, 0, 32, 12]])

级联的两个数组维度一样,但是行列个数不一样会如何?

如果横向级联保证行数一致,纵向级联保证列数一致

注意:维度不一致的数组无法级联

arr_new = np.random.randint(0,100,size=(5,5))

array([[29, 43, 36, 67, 32],

[63, 65, 31, 90, 55],

[13, 59, 3, 3, 22],

[55, 26, 10, 5, 80],

[27, 20, 61, 75, 23]])

arr

array([[21, 36, 62, 40, 52, 54],

[91, 45, 40, 35, 17, 98],

[48, 49, 36, 59, 47, 36],

[80, 66, 77, 21, 1, 80],

[18, 32, 55, 0, 32, 12]])

np.concatenate((arr,arr_new), axis=0) #这样就会报错他俩列数不同

np.concatenate((arr,arr_new), axis=1) #先写的数组元素在前

array([[21, 36, 62, 40, 52, 54, 29, 43, 36, 67, 32],

[91, 45, 40, 35, 17, 98, 63, 65, 31, 90, 55],

[48, 49, 36, 59, 47, 36, 13, 59, 3, 3, 22],

[80, 66, 77, 21, 1, 80, 55, 26, 10, 5, 80],

[18, 32, 55, 0, 32, 12, 27, 20, 61, 75, 23]])

图片的9宫格

img_arr3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)

img_arr9= np.concatenate((img_arr3,img_arr3,img_arr3), axis=0)

plt.imshow(img_arr9)

常用的聚合操作

sum求和、max最大值、min最小值、mean均值

#sum求和、max最大值、min最小值、mean均值,它们4个用法一致

arr.sum()#计算所有元素的和

1340arr.sum(axis=0) #计算每列元素的和

array([258, 228, 270, 155, 149, 280])

arr.sum(axis=1) #计算每行元素的和

array([265, 326, 275, 325, 149])

常用的数学函数

NumPy 提供了标准的三角函数及反三角函数:sin()、cos()、tan()

numpy.around(a,decimals) 函数返回指定数字的四舍五入值。

参数说明:

a: 数组

decimals: 舍入的小数位数。 默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置

np.sin([3.5,4.6,2.1])

array([-0.35078323, -0.993691 , 0.86320937])

np.around([33.4,51.2,55.8]) #默认decimals为0

array([33., 51., 56.])

np.around([33.4,51.2,55.8], decimals=1) #decimals=1保留一位小数

array([33.4, 51.2, 55.8])

np.around([33.4,51.2,55.8], decimals=-1) #decimals=-1个位数上四舍五入

array([30., 50., 60.])

常用的统计函数

numpy.amin() 和numpy.amax(),用于计算数组中的元素沿指定轴的最小、最大值。

numpy.ptp():计算数组中元素最大值与最小值的差(最大值 - 最小值)极差。

numpy.median() 函数用于计算数组 a 中元素的中位数(中值)

标准差std():标准差是一组数据平均值分散程度的一种度量。所有数据与均值的差的平方和除以元素个数开根号

公式:std = sqrt(mean((x - x.mean())**2))

如果数组是 [1,2,3,4],则其平均值为 2.5。 因此,差的平方是 [2.25,0.25,0.25,2.25],并且其平均值的平方根除以 4,即 sqrt(5/4) ,结果为 1.1180339887498949。

方差var():统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)。换句话说,标准差是方差的平方根。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值