【数据处理】NumPy库介绍及运用

3.1 NumPy

3.1.1 NumPy简介

1. 简要介绍

NumPy,即Numeric Python;提供丰富的数学函数、强大的多维数组对象以及优异的运算性能。

  • N维数组结构
  • 精密复杂的函数
  • 可集成到C/C++和Fortran代码的工具
  • 线性代数、傅里叶变换以及随机数能力

2.数组运用举例

  • 音频文件存储

音频文件可以存储为一维数组audio[],取第一秒的数据audio[:44100],下图中的数组元素表示该段的音频数据。
image.png

  • 图像存储

图像可以看成是若干个像素组成的矩阵,大小为其宽度和高度。

  • 黑白图像/灰度图像

每个像素可以由单个数字表示,image[:10,:10]截取下图中的一部分图片表示如下:
image.png

  • 彩色图像

每个像素点由三个数字表示红绿蓝三种颜色的数据,大小为高3,数组为三维数组
image.png

3.1.2 NumPy的下载与安装

菜鸟教程:https://www.runoob.com/numpy/numpy-install.html

  • NumPy 包的下载地址:https://pypi.python.org/pypi/numpy
  • 使用pip工具直接下载NumPy包
pip install numpy

image.png
anaconda自带安装了numpy

  • 导入NumPy
import numpy
import numpy as np
from numpy import *
from numpy import array, sin

3.1.3 Numpy数组介绍及运算

numpy数组是一个多维数组对象 ,称为ndarray;
numpy.array和标准Python库类array.array不一样,标准库中的只处理一维数组和提供少量功能。

1.numpy.array组成部分

  • 实际的数据,下标从0开始,同一个numpy数组的所有元素类型必须相同
  • 描述这些数据的元数据

2.列表和numpy数组对比

元素类型
  • 列表list:元素可以为多种类型,a = [1,8.0,“abc”,obj]
  • numpy数组ndarray:元素必须为同一种类型,如a = numpy.array([0,1,2,3,4]),数据类型均为整型
元素运算

Numpy优势

  • 矢量化,代码中没有显示的索引和循环操作
  • 广播,对每个元素进行操作
import numpy as np

# 如数组相乘比较
# numpy数组ndarray
a = np.array([0, 1, 2, 3, 4])
b = np.array([5, 6, 7, 8, 9])
c1 = a * b
print(c1)

# 列表list
a = [0, 1, 2, 3, 4]
b = [5, 6, 7, 8, 9]
c2 = list()
for i in range(len(a)):
    c2.append(a[i] * b[i])
print(c2)

3.numpy支持的数据类型

bool,int,float,complex

名称描述名称描述
bool用一个字节存储的布尔类型 (True或False)uint32无符号整数,0至2 ** 32 -1
int由所在平台决定其大小的整数
(一般为int32或int64)
uint64无符号整数,0至2**63-1
int8一个字节大小,-128 至 127float16半精度浮点数:16位,正负号1位, 指数5位,精度10位
int16整数,-32768 至 32767float32单精度浮点数:32位,正负号1位, 指数8位,精度23位
int32整数, -2 ** 31 至 2 ** 32 -1float64或float双精度浮点数:64位,正负号1位, 指数11位,精度52位
int64整数,-263至263-1complex64复数,分别用两个32位浮点数表示实部和虚部
uint8无符号整数,0至255complex128或complex复数,分别用两个64位浮点数表示 实部和虚部
uint16无符号整数, 0 至 65535

4. 创建Numpy数组

Python中创建数组的5中通用方法
  • 通过其它Python结构创建(例如列表和元组)
  • numpy数组本身的数组创建对象(例如arange,ones,zeros等)
  • 从磁盘读取数组
  • 使用字符串或缓冲区从原始字节创建数组
  • 使用特殊的库函数(如随机函数random)
创建数组实例

array,arange,zeros,ones,full,eye,np.linspace

代码结果说明
a = array([0,1,2,3,4])[0,1,2,3,4]创建一个一维数组,有5个元素,每个元素为整型
a1 = arange(5)[0,1,2,3,4]
a2 = arange(0,6,2)[0,2,4]arange函数的三个参数分别为:起始数( 含),终止数(不含),步长
b = array([(1.0,2.0,3.0),(4.0,5.0,6.0)])[[1.,2.,3.],[4.,5.,6.]]创建一个二维数组,2行3列,共有6个元 素,每个元素为浮点型64位
c = array( [ [1,2,3], [4,5,6] ], dtype=complex )[[1.+0.j, 2.+0.j, 3.+0.j], [4.+0.j, 5.+0.j, 6.+0.j]]二维数组,2行3列,效果与上 面一种方法类似,但数据类型为 complex128
d = zeros((2,3))[[0. 0. 0.],
[0. 0. 0.]]
创建一个2行3列的二维数组,值全部为0
e = ones((1,5))[[1. 1. 1. 1. 1.]]创建一个1行5列的一维数组,值全为1
f = full((2,3,4),8)[[[8 8 8 8],
[8 8 8 8],
[8 8 8 8]]

[[8 8 8 8],
[8 8 8 8],
[8 8 8 8]]]
创建一个元素全是8的三维数组
g = eye(3,3)[[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]创建3行3列的二维数组,对角线为1,其 它元素均为0
h = random.random((2,3))[[0.98772846, 0.53233087, 0.81990949], [0.45654177, 0.25143958, 0.45555412]]创建2行3列的二维数组,元素值为随机数
i = np.arange(3) i.repeat(2)[0,1,2]
[0,0,1,1,2,2]
单个元素重复
j = np.arange(3) np.tile(j, 2)
np.tile(j, (2,3))
[0,1,2]
[0,1,2,0,1,2]
[[0,1,2,0,1,2,0,1,2],
[0,1,2,0,1,2,0,1,2]]
数组整理重复
k1 = np.linspace(0, 5, 5)
k1 = np.linspace(0, 5, 5, endpoint=False)
[0. , 1.25, 2.5 , 3.75, 5. ] [0., 1., 2., 3., 4.]在指定的间隔内返回均匀间隔的数字, 形成一个等差数列

numpy数组的属性

NumPy支持多维数组,每个维度(dimensions)也称为轴 (axes)。维度的数量称为秩(rank),一维数组的秩为1, 二维数组的秩为2,以此类推。
查看属性:数组名.属性名”或者“属性名(数组名)”,例如:a.ndim或者ndim(a)
a = array([0,1,2,3,4])
b = array( [ (1.0, 2.0, 3.0), (4.0, 5.0, 6.0) ] )
c = array( [ [1,2,3], [4,5,6] ], dtype=complex )

属性名描述数组a数组b数组c
ndim维数,等于秩122
shape每个维度上的长度52,32,3
size数组元素的总个数566
dtype表示数组中元素类型的对象int32float64complex128
itemsize数组中每个元素的大小(以字节为单位)4816

numpy数组的输出,索引
  • 一维数组被打印成行,二维数组被打印为矩阵,三维数组被打印为矩阵列表
  • 如果一个数组太大了,无法完整输出,打印时NumPy将自动省略中间部分而只打印角落的部分
from numpy import *

a = arange(0, 100, 10)
print(a)  # [ 0 10 20 30 40 50 60 70 80 90]
a[2]  # 20 a数组的第2个元素
a[2:5]  # [20,30,40] a数组的第2个到第4个元素
indices = [1, 6, -2]  # 通过索引获取数组中的部分数据
print(a[indices])  # [10 60 80] 取a数组的正数第1和第6个,以及倒数第2个元素
mask = array([True, False, True, False, False, True, False, True, False, False])
print(a[mask])  # [0 20 50 70] 通过布尔值来索引,只输出布尔值为真的对应数据

b = array([(1.0, 2.0, 3.0), (4.0, 5.0, 6.0)])
c = array([[1, 2, 3], [4, 5, 6]], dtype=complex)

# 二维数组的第一个元素11所在的位置是第0行第0列
d = array([[11, 12, 13, 14, 15],
           [21, 22, 23, 24, 25],
           [31, 32, 33, 34, 35],
           [41, 42, 43, 44, 45],
           [51, 52, 53, 54, 55]])

print(a, b, c, sep='\n')

print(d[0, 1:4])  # 第0行的[1,4)列输出
print(d[1:4, 0])  # 第[1,4)行,第0列输出
print(d[::2])  # 所有行中,步长为2;列为所有列
print(d[::2, ::2])  # 所有行中,步长为2;列为所有列中,步长为2
print(d[:, 1])  # 所有行,列为第一列
  • 数组切片结果

image.png

5.numpy数组的运算

运算示例1

a = arange(10) #[0,1,2,3,4,5,6,7,8,9]

b=arange(0,100,10) # [0,10,20,30,40,50,60,70,80,90]

代码结果说明
a.sum()45数组求和
a.min()0数组的最小值
a.max()9数组的最大值
a.cumsum()[0,1,3,6,10,15,21,28,36,45]输出结果中每一个元素的值等于数组前n个元素的累加和
b[b>50][60,70,80,90]只取出大于50的元素
b[b%3 == 0][0,30,60,90]只取出B数组中能整除3的元素
运算示例2

a = array( [10,20,30,40] )
b = arange( 4 ) # [0,1,2,3]

代码结果说明
a+b[10,21,32,43]两个数组逐元素相加
a-b[10,19,28,37]两个数组逐元素相减
a*b[0,20,60,120]两个数组逐元素相乘
a/b[inf,20.,15.,13.33333]两个数组逐元素相除,第一个元素为除0的结果
b**2[0,1,4,9]数组b元素的乘方
10*sin(a)[-5.44021111, 9.12945251, -9.88031624, 7.4511316 ]对a的元素求sin后再乘以10
a<21[Ture,Ture,False,False]判断a的元素值是否小于21,小于的显示为True, 不小于的显示为False
a.dot(b)200dot() 函数计算两个数组的点积,即向量乘法,相当于a1b1+a2b2+a3b3+a4b4,得到一个数值

统计特征计算

a = array([0,1,2,3,4])

函数名描述结果
mean(a)算数平均值2.0
std(a)标准差1.1412135623730951
var(a)方差2.0
average(a,weight= [0,0.1,0.2,0.3,0.4])加权平均值3.0
median([1,3,100])中位数3

5. numpy数组形状调整

形状调整指的是数组维度方面的变化

reshape函数

reshape后形成的新数组,和原数组共享同一段内存空间,并不会产生一个新的地址空间。如果对其中a、b、c中任何一个数组的元素进行修改,其它2个数组的内容也同时会发生变化。例如:b[0,0]=99,修改完毕后,a[0]和c[0,0,0,0]的值也会变成99。

from numpy import *

a = arange(16)  # a是一个一维数组 [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
b = a.reshape(4, 4)  # b是一个二维数组 
c = a.reshape(2, 2, 2, 2)  # c是一个四维数组
print(a, b, c, sep='\n')

flatten函数

使用flatten函数可以将高维数组转化为向量,和reshape不同的是, flatten函数会生成一份新的复制。

from numpy import *

a = array([[n + m * 10 for n in range(3) for m in range(4)]])
# n [0,2];m [0,3]
# a是一个3行4列的二维数组,[[ 0 10 20 30  1 11 21 31  2 12 22 32]]
b = a.flatten()  # b是一个向量,[ 0 10 20 30  1 11 21 31  2 12 22 32]
print(b)
b[0:4] = -1  # 修改b的前4个元素值
print(a)
print(b)

6. numpy常用函数汇总

image.png

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"课题:项目6 分析大数据 第2部分 运用大数据分析 Kmeans算法实战 "课次:第19次 " "教学目标及要求: " "(1)任务1 安装Scikit Learn 库(掌握) " "(2)任务2 解析KMeans算法(掌握) " "(3)任务3 运用KMeans算法实战(熟练掌握) " "教学重点: " "(1)任务2 解析KMeans算法(掌握) " "(2)任务3 运用KMeans算法实战(熟练掌握) " "教学难点: " "(1)任务2 解析KMeans算法(掌握) " "(2)任务3 运用KMeans算法实战(熟练掌握) " "思政主题: " "教学步骤及内容 : "旁批栏: " "1.课程引入 " " " " " "2.本次课学习内容、重难点及学习要求介绍 " " "(1)任务1 安装Scikit Learn 库(掌握) " " "(2)任务2 解析KMeans算法(掌握) " " "(3)任务3 运用KMeans算法实战(熟练掌握) " " "3.本次课的教学内容 " " "(1)任务1 安装Scikit Learn 库(掌握) " " "Scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,Sci" " "Py和matplotlib模块之上能够为用户提供各种机器学习算法接口,可以" " "让用户简单、高效地进行数据挖掘和数据分析。 " " "分类是指识别给定对象的所属类别,属于监督学习的范畴,最常见的应" " "用场景包括垃圾邮件检测和图像识别等。目前Scikit-learn已经实现的" " "算法包括支持向量机(SVM)、K-近邻、逻辑回归、随机森林、决策树 " " "及多层感知器(MLP)神经网络等。 " " "回归是指预测与给定对象相关联的连续值属性,最常见的应用场景包括" " "预测药物反应和预测股票价格等。 目前Scikit-learn已经实现的算法 " " "包括支持向量回归(SVR)、脊回归、Lasso回归、弹性网络(Elastic " " "Net)、最小角回归(LARS " " ")、贝叶斯回归及各种不同的鲁棒回归算法等。 " " "聚类是指自动识别具有相似属性的给定对象,并将其分组为集合,属于" " "无监督学习的范畴,最常见的应用场景包括顾客细分和试验结果分组。" " "目前Scikit-learn已经实现的算法包括K-均值聚类、谱聚类、均值偏移" " "、分层聚类、DBSCAN聚类等。 " " "数据降维是指使用主成分分析(PCA)、非负矩阵分解(NMF)或特征选" " "择等降维技术来减少要考虑的随机变量的个数,其主要应用场景包括可" " "视化处理和效率提升。 " " "模型选择是指对于给定参数和模型的比较、验证和选择,其主要目的是" " "通过参数调整来提升精度。目前Scikit-learn实现的模块包括格点搜索" " "、交叉验证和各种针对预测误差评估的度量函数。 " " "数据预处理是指数据的特征提取和归一化,是机器学习过程中的第一个" " "也是最重要的环节。这里归一化是指将输入数据转换为具有零均值和单" " "位权方差的新变量,但因为大多数时候都做不到精确到零,因此会设置" " "一个可接受的范围,一般都要求范围为0~1。而特征提取是指将文本或 " " "图像数据转换为可用于机器学习的数字变量。 " " "在进去数据分析前,我们需要为我们的IDLE安装sklearn库,安装Sciki" " "t-learn库需要使用如下命令: " " "pip install numpy " " "pip install scipy " " "pip install sklearn " " "(2)任务2 解析KMeans算法(掌握) " " "1)聚类算法 " " "聚类分析是在对象数据中发现对象之间关系。一般来说,组内相似性越" " "高,组间相似性越大,则聚类的效果越好。聚类分析将大量数据划分为" " "性质相同的子类,便于了解数据的分布情况。因此,它广泛应用于模式" " "识别、图像处理、数据压缩等许多领域,例如: " " "在市场分析中,通过聚类分析能帮助决策者识别不同特征的客户群,以" " "及各客户群的行为特征; " " "在生物工程研究中,聚类分析能够用于推导动植物的分类,按照功能对" " "基因进行划分并获取种群中的固有结构特征; " " "在非关系数据库领域(如空间数据库领域),聚类分析能够识别具有相同" " "地理特征的区域以及该区域的环境和人的特征; " " "在web信息检索领域,聚类分析能够对web文档进行分类,提高检索效率" " "。 " " "2)KMeans算法: " " "k-平均算法(英文:k-means " " "clu
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值