京公网安备 11010802034615号
经营许可证编号:京B2-20210330
【导语】在数据分析当中,python用到最多的第三方库就是numpy,今天我们就来讲讲!
作者:王皓
来源:大数据DT(ID:hzdashuju)
01 ndarray创建与索引
在学习Numpy之前我们需要了解一个概念:数组维数。
在计算机科学中,数组数据结构(array data structure),简称数组(Array),是由相同类型的元素的集合所组成的数据结构,分配一块连续的内存来存储。按数组维数分类可分为:一维数组、二维数组、多维数组(N维数组)。
numpy是最著名的 python库之一,常用于高性能计算。Numpy提供了两种基本对象:ndarray和ufunc。
NumPy作为一个开源的Python科学计算基础库,包含:一个强大的N维数组对象ndarray ;广播功能函数 ;整合C/C++/Fortran代码的工具 ;线性代数、傅里叶变换、随机数生成等功能。NumPy是SciPy、Pandas等数据处理或科学计算库的基础。
当然这里就有一个问题出现了,Python已有列表类型,为什么需要一个数组对象(类型)?
因为:
但是Python内置的array模块既不支持多维数组功能,又没有配套对应的计算函数,所以基于Numpy的ndarray在很大程度上改善了Python内置array模块的不足,将重点介绍ndarray的创建与索引。
1. 创建ndarray对象
1)ndarray数据类型
在《Python 3智能数据分析快速入门》该节内容中,作者罗列了15种数据类型,其中实数数据类型13种。这些实数数据类型之间可以互相转换。
这时有人会问,为什么要支持这么多种数据类型?是因为对比Python语法来说仅支持整数、浮点数和复数3种类型,但是当科学计算涉及数据较多,对存储和性能都有较高要求,所以对数据类型进行精细定义,有助于NumPy合理使用存储空间并优化性能和程序员对程序规模有合理评估。
对于15种数据类型在这里笔者将不赘述,书上有详细的解释以及案例示范。
2)ndarray创建
在《Python 3智能数据分析快速入门》该节内容中,作者介绍了两种创建ndarray的方法:
这里笔者再补充四种方法并整理出来:
对于方法②再补充5个常用函数:
3)随机数
Numpy提供了强大的生成随机数的功能,使用随机数也能创建ndarray。基本语法格式:numpy.random.×××() 。在《Python 3智能数据分析快速入门》该节内容中,作者罗列了13个函数及其说明,笔者再补充2个函数:
2. ndarray的索引和切片
索引与切片是ndarray使用频率最高的操作。相较于list,ndarray索引与切片在功能上更加丰富,在形式上更多样。ndarray的高效率在很大程度上需归功于其索引的易用性。
1)一维ndarray的索引
一维ndarray的索引方法很简单,与list的索引方法一致,相关案例在书上有展示,这里不再赘述。
2)多维ndarray的索引
多维的每一个维度都有一个索引,各个维度的索引之间用逗号隔开,例如:arr[ [维度1(行)] , [维度2(列)] ]。
代码清单如下:
import numpy as np print(np.arange(10))
输出:[0 1 2 3 4 5 6 7 8 9]
arrnp.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
print('\n',arr)
输出:
[[ 1 2 3 4 5]
[ 4 5 6 7 8]
[ 7 8 9 10 11]]
#访问第0行中第3列和第4列元素
print('切片结果:',arr[0,3:5])
输出:
切片结果:[4 5]
#访问第1行和第二行中第2列、第3列和第4列的元素
print('切片结果:\n',arr[1:,2:])
输出:
切片结果:
[6 7 8]
[9 10 11]
#访问第2列的元素
print('切片结果:',arr[:2])
输出:
切片结果:[3 6 9]
ndarray在索引与切片的时候除了使用整形的数据外,还可以使用布尔型,代码清单如下:
# 索引第1、3行中第2列的元素。Define true 1, define false 0 mask=np.array([1, 0, 1], dtype=np.bool) print(arr[mask, 1])
输出:
[2 8]
3)花式索引
花式索引是一个Numpy术语,是在基础索引方式之上衍生出的功能更强大的索引方式。它能够利用整数ndarray进行索引。
在这节的学习中,发现一个有趣的问题:在使用np.empty函数时,本想用arr = np.empty((4,7))创建一个空的多维数组,但是返回的结果是这样:
语法格式数值等都没有什么错误的情况下,初步怀疑是函数本身的原因,于是用help()函数查看它的详细介绍,竟然查到了:
数据类型是可选且默认值是numpy.float64。(好家伙,书上可没告诉我)所以只需在后面选择int就行。
arr = np.empty((4,7),int) print(arr)
输出:
另一个问题是关于ix函数生成区域索引器的问题,代码如下:
arr = np.array([np.arange(i*4, i*4+4) for i in np.arange(6)])
print('创建的二维ndarray arr为:\n', arr)
输出:
#利用np.ix函数将两个一维的整数ndarray转化为方形区域的索引器 print('使用ix成片索引arr结果为:\n', arr[np.ix_([5, 1, 4, 2], [3, 0, 1, 2])])
输出:
out[15]为什么会返回这样一个结果?是因为ix函数结果的排序是基于[5,1,4,2],[3,0,1,2]两个数组产生的笛卡尔积,即(5,3),(5,0),(5,1),(5,2);(1,3),(1,0),(1,1),(1,2);(4,3),(4,0),(4,1),(4,2);(2,3),(2,0),(2,1),(2,2)。然后按照索引(5,3),(5,0),(5,1),(5,2)得到第0行元素:23 20 21 22,之后的以此类推。
02 ndarray的基础操作
ndarray的基础操作包括设置ndarray形状、展平ndarray、组合ndarray、分割ndarray、ndarray的排序与搜索,以及ndarray的字符串操作等。
书中已经介绍了12种基本函数和它们的代码演示:
在这里做几点补充和说明:
但请注意深度分割函数dsplit的使用条件:
import numpy as np arr=np.arange(12)
arr.shape = (4, 3)
print('\n', arr)
输出:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
print('形状改变后, ndarray arr的维度为:',arr.ndim)
输出:形状改变后,ndarray arr的维度为:2
'''
dsplit分割的ndarray必须是三维ndarray,
且分割的数目必须为shape属性中下标为2的值的公约数。
比如这里的分割数就是36,下标为2的值是4,符合要求
'''
arr = np.arange(36).reshape(3,3,4)
print('创建的三维ndarrary arr为:\n',arr)
创建的三维 ndarrary arr为:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 12 13 14 15]
[ 16 17 18 19]
[ 20 21 22 23]]
[[ 24 25 26 27]
[ 28 29 30 31]
[ 32 33 34 35]]]
1. 排序与搜索
书中已经介绍了6种基本函数和它们的代码演示:
在这里做几点补充和说明:
其中注意argsort函数使用的方法类似于sort,只是返回的值不同,返回的是ndarray arr的下标。
2. 字符串操作
Numpy的char模块提供的字符串操作函数可以运用向量化运算来处理整个ndarray,而完成同样的任务,Python的列表则通常借助循环语句遍历列表,并对逐个元素进行相应的处理。
Numpy的char模块提供的常用字符串操作函数具有字符串的连接、切片、删除、替换、字母大小写转换和编码调用等功能,可谓是十分方便,书上有非常详细的介绍,建议大家结合《Python 3智能数据分析快速入门》这本书美味食用。
03 ufunc
ufunc,全称通用函数(universal function),是一种能够对ndarray中所有元素进行操作的函数,而不是对ndarray对象操作。
广播(Broadingcasting)是指不同形状的ndarray之间执行算术运算的方式。若两个ndarray的shape不一致,Numpy则会实行广播机制。为了更好地使用广播机制,需要遵循4个原则。原则及案例在书上第159页有详细演示,此处不再赘述。
常用的ufunc运算有算数运算、三角函数、集合运算、比较运算、逻辑运算和统计计算等。书上提供了若干种常用函数,对ndarray中所有元素的运算来说,在提供了极其方便与快捷的同时,又囊括一切强大的功能。相关函数及案例在书上第161页有详细演示,此处不再赘述。
04 matrix与线性代数
Numpy的matrix是继承自Numpy的二维ndarray对象,不仅拥有二维ndarray的属性、方法与函数,还拥有诸多特有的属性与方法。同时,Numpy中的matrix与线性代数中的矩阵概念几乎完全相同,同样含有转置矩阵、共轭矩阵、逆矩阵等概念。
只要是大学期间学过《线性代数》这门课程的同学,对于《Python 3智能数据分析快速入门》的学习完全没有问题,相关专业术语及技术实现细节在本节中都有强调。详情请从第169页开始学习。
05 Numpy文件读写
读写文件是利用Numpy进行数据处理的基础,Numpy中主要有二进制的文件读写和文件列表形式的数据读写两种形式。其中二进制文件读取使用书上第175页中提到的load函数;二进制文件存储使用save和savez函数。
但是在实际的数据分析任务中,更多使用文本格式的数据,如txt或csv,因此经常使用loadtxt函数执行对文本格式的数据的读取任务和savetxt函数执行对文本格式的数据的存储任务。
但是它们只能有效存取一维和二维数据,这里我再对多维数据的存取的方法进行补充:
a.tofile(frame, sep='', format='%s')
np.fromfile(frame, dtype=float, count=‐1, sep='')
需要注意的是,该方法需要读取时知道存入文件时数组的维度和元素类型,a.tofile()和np.fromfile()需要配合使用,可以通过元数据文件来存储额外信息。
参考文献:
1. 《Python 3智能数据分析快速入门》 李明江、张良均、周东平、张尚佳 著,机械工业出版社出版。
2.中国大学MOOC,《Python数据分析与展示》作者:嵩天 。
3.百度百科:数组维数
4.CSDN:《花式索引与np.ix_函数》TzeSing 著
5.CSDN:《关于np.empty()函数的用法》爱数据的橙子 著
CDA学员免费下载查看报告全文:2026全球数智化人才指数报告【CDA数据科学研究院】.pdf
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在Excel数据分析中,数据透视表是汇总、整理海量数据的高效工具,而公式则是实现数据二次计算、逻辑判断的核心功能。实际操作中 ...
2026-04-30Excel透视图是数据分析中不可或缺的工具,它能将透视表中的数据快速可视化,帮助我们直观捕捉数据规律、呈现分析结果。但在实际 ...
2026-04-30 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-04-30在中介效应分析中,人口统计学变量(如年龄、性别、学历、收入、职业等)是常见的控制变量或调节变量,其处理方式直接影响分析结 ...
2026-04-29在SQL数据库实操中,日期数据的存储与显示是高频需求,而“数字日期”(如20240520、20241231、45321)是很多开发者、数据分析师 ...
2026-04-29 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-04-29在手游行业竞争日趋白热化的当下,“流量为王”早已升级为“留存为王”,而付费用户留存率更是衡量一款手游盈利能力、运营质量的 ...
2026-04-28在日常MySQL数据库运维与开发中,经常会遇到“同一台服务器上,两个不同数据库(以下简称“源库”“目标库”)的表数据需要保持 ...
2026-04-28 很多分析师每天和数据打交道,但当被问到“标签是什么”“标签和指标有什么区别”“标签体系如何设计”时,却常常答不上来。 ...
2026-04-28箱线图(Box Plot)作为一种经典的数据可视化工具,广泛应用于统计学、数据分析、科研实证等领域,核心价值在于直观呈现数据的集 ...
2026-04-27实证分析是社会科学、自然科学、经济管理等领域开展研究的核心范式,其核心逻辑是通过对多维度数据的收集、分析与解读,揭示变量 ...
2026-04-27 很多数据分析师精通Excel函数和数据透视表,但当被问到“数据从哪里来”“表和视图有什么区别”“数据库管理系统和SQL是什么 ...
2026-04-27在大数据技术飞速迭代、数字营销竞争日趋激烈的今天,“精准触达、高效转化、成本可控”已成为企业营销的核心诉求。传统广告投放 ...
2026-04-24在游戏行业竞争白热化的当下,用户流失已成为制约游戏生命周期、影响营收增长的核心痛点。据行业报告显示,2024年移动游戏平均次 ...
2026-04-24 很多业务负责人开会常说“我们要数据驱动”,最后却变成“看哪张报表数据多就用哪个”,往往因为缺乏一套结构性的方法去搭建 ...
2026-04-24在Power BI数据可视化分析中,切片器是连接用户与数据的核心交互工具,其核心价值在于帮助使用者快速筛选目标数据、聚焦分析重点 ...
2026-04-23以数为据,以析促优——数据分析结果指导临床技术改进的实践路径 临床技术是医疗服务的核心载体,其水平直接决定患者诊疗效果、 ...
2026-04-23很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“哪些指标是所有企业都需要的”“哪些指标是因行业而异的”“北极星指标和 ...
2026-04-23在数字化时代,客户每一次点击、浏览、下单、咨询等行为,都在传递其潜在需求与决策倾向——这些按时间顺序串联的行为轨迹,构成 ...
2026-04-22数据是数据分析、建模与业务决策的核心基石,而“数据清洗”作为数据预处理的核心环节,是打通数据从“原始杂乱”到“干净可用” ...
2026-04-22