numpy之多维数组
文章目录
- 一、生成ndarray
- 二、ndarray的数据类型
- 三、索引和切片
- 3.1 一维数组的索引
- 3.2 多维数组的索引
- 3.3 布尔索引
NumPy的核心特征之一就是N-维数组对象—— ndarray。ndarray是Python中一个快速、灵活的大型数据集容器,数组允许你使用类似于标量的操作语法在整块数据上进行数学计算。
一个ndarray是一个通用的多维同类数据容器,也就是说,它包含的每一个元素均为相同类型。每一个数组都有一个shape
属性,用来表征数组每一维度的数量;每一个数组都有一个dtype
属性,用来描述数组的数据类型。
“数组”、“NumPy数组”或“ndarray”时,他们都表示同一个对象:ndarray对象。
一、生成ndarray
生成数组最简单的方式就是使用array
函数。array函数接收任意的序列型对象(当然也包括其他的数组),生成一个新的包含传递数据的NumPy数组:
data = [1, 2, 3, 4, 5]
arr = np.array(data)
arr # 结果:array([1, 2, 3, 4, 5])
如果是嵌套序列,例如同等长度的列表,将会自动转换成多维数组:
data = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
arr = np.array(data)
arr # 结果:array([[1, 2, 3, 4, 5],[1, 2, 3, 4, 5]])arr.shape # 结果:(2, 5)
除了np.array
,还有很多其他函数可以创建新数组。例如,给定长度及形状后,zeros
可以一次性创造全0数组,ones
可以一次性创造全1数组。empty
则可以创建一个没有初始化数值的数组。
arange
是Python内建函数range
的数组版:
np.arange(10) # 结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
二、ndarray的数据类型
数据类型,即dytpe,是一个特殊的对象,它包含了ndarray需要为某一种类型数据所申明的内存块信息(也称为元数据,即表示数据的数据):
data = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
arr = np.array(data, dtype='float')
arr.dtype # 结果:dtype('float64')
可以使用astype
方法显式地转换数组的数据类型:
data = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
arr1 = np.array(data, dtype='float')
arr2 = arr1.astype(np.int32)
arr2.dtype # 结果:dtype('int32')
要注意,传入astype
的最好是np.int32
之类的,而不是np.int
,否则会有警告。
三、索引和切片
3.1 一维数组的索引
一维数组比较简单,看起来和Python的列表很类似,但数组的切片是原数组的视图,这意味着数据并不是被复制了,任何对于视图的修改都会反映到原数组上:
a = np.array([1, 2, 3, 4])
b = a[0:2]
b[0] = 0
a # 结果:array([0, 2, 3, 4])
如果想要一份数组切片的拷贝而不是一份视图的话,必须使用copy
显式地复制这个数组:
a = np.array([1, 2, 3, 4])
b = a[0:2].copy()
b[0] = 0
a # 结果:array([1, 2, 3, 4]),未改变原数组
b # 结果:array([0, 2])
3.2 多维数组的索引
在一个二维数组中,每个索引值对应的元素不再是一个值,而是一个一维数组:
a = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
a # 结果:array([[1, 2, 3, 4],[3, 4, 5, 6]])
a[0] # 结果:array([1, 2, 3, 4])
有两种方法获取单个元素:
a = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
a # 结果:array([[1, 2, 3, 4],[3, 4, 5, 6]])
a[0][2] # 结果:3
a[0, 2] # 结果:3
也可以进行多组切片:
a = np.array([[1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8]])
a # 结果:array([[1, 2, 3, 4],[3, 4, 5, 6],[5, 6, 7, 8]])
a[:2, 1:] # 结果:array([[2, 3, 4],[4, 5, 6]])
3.3 布尔索引
在索引数组时可以传入布尔值数组,布尔值数组的长度必须和数组轴索引长度一致(当布尔值数组的长度不正确时,布尔值选择数据的方法并不会报错):
a = np.array([[1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8], [7, 8, 9, 10]])
a # 结果:array([[ 1, 2, 3, 4],[ 3, 4, 5, 6],[ 5, 6, 7, 8],[ 7, 8, 9, 10]])b = np.array(['dog', 'cat', 'dog', 'pig']) # 如果此处不用数组的话,下面的只会输出False
b == 'dog' # 结果:array([ True, False, True, False])a[b == 'dog'] # 结果:array([[1, 2, 3, 4],[5, 6, 7, 8]])
可以在条件表达式前使用~
对条件取反:
a[~(b == 'dog')] # 结果:array([[ 3, 4, 5, 6],[ 7, 8, 9, 10]])
如果有多个布尔值条件,可以用数学操作符如&(表示并)、|(表示或)连接(每个布尔值条件要用小括号),但不能用and或or:
a[(b == 'dog') | (b == 'pig')] # 结果:array([[ 1, 2, 3, 4],[ 5, 6, 7, 8],[ 7, 8, 9, 10]])
也可以基于常识来设置布尔值数组的值,比如将小于5的数都变为5:
a[a < 5] = 5
a # 结果:array([[ 5, 5, 5, 5],[ 5, 5, 5, 6],[ 5, 6, 7, 8],[ 7, 8, 9, 10]])
numpy之多维数组相关推荐
- Numpy之N维数组-ndarray
Numpy之N维数组-ndarray 1 ndarray的属性 数组属性反映了数组本身固有的信息. 属性名字 属性解释 ndarray.shape 数组维度的元组 [假如是8行5列的数组,将会返 ...
- Numpy 笔记: 多维数组的切片(slicing)和索引(indexing)【转】
目录 切片(slicing)操作 索引(indexing) 操作 最简单的情况 获取多个元素 切片和索引的同异 切片(slicing)操作 Numpy 中多维数组的切片操作与 Python 中 lis ...
- numpy获取二维数组某一行、某一列
numpy获取二维数组某一行.某一列 1.需求 有一个二维数组: a = [[1, 2, 3, 4, 5, 6],[7, 8, 9, 10, 11, 12],[13.2, 14.8, 15.9, 16 ...
- Python numpy实现二维数组和一维数组拼接
撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape 输出的值应该为(3,) 二维数组 2.numpy初始化二 ...
- python一维数组和二维数组,Python numpy实现二维数组和一维数组拼接的方法
撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape 输出的值应该为(3,) 二维数组 2.numpy初始化二 ...
- NumPy 创建多维数组
NumPy 创建多维数组 arange 函数创建的数组作为列表元素,把这个列表作为参数传给 array 函数,从而创建了一个 2 × 2 的数组,而且没有出现任何报错信息. Example 1 #!/ ...
- 图解数据分析(9) | Numpy - 与1维数组操作(数据科学家入门·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...
- 图解数据分析(10) | Numpy - 与2维数组操作(数据科学家入门·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...
- python一维数组和二维数组_Python numpy实现二维数组和一维数组拼接的方法
Python numpy实现二维数组和一维数组拼接的方法 撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape ...
- Python 进阶——从 list 到 NumPy 的多维数组
NumPy 库中提供了大量与多维数组(numpy.ndarray)有关的功能.NumPy 对数据结构(如实现邻接矩阵或加权矩阵)的支持还是很不错的. 我们要实现一个基于 list 的.面向 n 个节点 ...
最新文章
- web python php golang_python go 语言完成最简单的web应用
- vue eslint 代码自动格式化
- 牛客算法周周练4 题解
- ndk中杀线程的办法
- 2d shader unity 阴影_Shader从入门到跑路(11):多Pass渲染
- Oracle日期函数TRUNC
- 工业自动化控制软件SCADA数据模型的使用方法实例
- linux系统安装kms,Linux安装部署KMS服务器
- 顶尖作者介绍 | 心理学领域研究“情绪”的大牛们有哪些?
- FPGA浮点运算实战
- 待忧伤开满山岗,等青春散场
- No Spring WebApplicationInitializer types detected on classpath
- 科普 | 什么是ChatGPT?试用ChatGPT,ChatGPT的启示!
- 从5亿红包到千亿营收,看百度的增长曲线
- 明德扬手把手教你设计VGA显示颜色
- 2019成长感悟和分享
- keil加入文件夹软件崩溃解决办法
- 数智商业创新的强大力量,用友BIP如何构筑产业互联网?
- 分辨率、像素点、图片尺寸区分
- 重启linux后无法ssh登录