文章目录

  • 一、生成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之多维数组相关推荐

  1. Numpy之N维数组-ndarray

    Numpy之N维数组-ndarray 1 ndarray的属性 数组属性反映了数组本身固有的信息. 属性名字 属性解释 ndarray.shape 数组维度的元组    [假如是8行5列的数组,将会返 ...

  2. Numpy 笔记: 多维数组的切片(slicing)和索引(indexing)【转】

    目录 切片(slicing)操作 索引(indexing) 操作 最简单的情况 获取多个元素 切片和索引的同异 切片(slicing)操作 Numpy 中多维数组的切片操作与 Python 中 lis ...

  3. numpy获取二维数组某一行、某一列

    numpy获取二维数组某一行.某一列 1.需求 有一个二维数组: a = [[1, 2, 3, 4, 5, 6],[7, 8, 9, 10, 11, 12],[13.2, 14.8, 15.9, 16 ...

  4. Python numpy实现二维数组和一维数组拼接

    撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape 输出的值应该为(3,) 二维数组 2.numpy初始化二 ...

  5. python一维数组和二维数组,Python numpy实现二维数组和一维数组拼接的方法

    撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape 输出的值应该为(3,) 二维数组 2.numpy初始化二 ...

  6. NumPy 创建多维数组

    NumPy 创建多维数组 arange 函数创建的数组作为列表元素,把这个列表作为参数传给 array 函数,从而创建了一个 2 × 2 的数组,而且没有出现任何报错信息. Example 1 #!/ ...

  7. 图解数据分析(9) | Numpy - 与1维数组操作(数据科学家入门·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...

  8. 图解数据分析(10) | Numpy - 与2维数组操作(数据科学家入门·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...

  9. python一维数组和二维数组_Python numpy实现二维数组和一维数组拼接的方法

    Python numpy实现二维数组和一维数组拼接的方法 撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape ...

  10. Python 进阶——从 list 到 NumPy 的多维数组

    NumPy 库中提供了大量与多维数组(numpy.ndarray)有关的功能.NumPy 对数据结构(如实现邻接矩阵或加权矩阵)的支持还是很不错的. 我们要实现一个基于 list 的.面向 n 个节点 ...

最新文章

  1. web python php golang_python go 语言完成最简单的web应用
  2. vue eslint 代码自动格式化
  3. 牛客算法周周练4 题解
  4. ndk中杀线程的办法
  5. 2d shader unity 阴影_Shader从入门到跑路(11):多Pass渲染
  6. Oracle日期函数TRUNC
  7. 工业自动化控制软件SCADA数据模型的使用方法实例
  8. linux系统安装kms,Linux安装部署KMS服务器
  9. 顶尖作者介绍 | 心理学领域研究“情绪”的大牛们有哪些?
  10. FPGA浮点运算实战
  11. 待忧伤开满山岗,等青春散场
  12. No Spring WebApplicationInitializer types detected on classpath
  13. 科普 | 什么是ChatGPT?试用ChatGPT,ChatGPT的启示!
  14. 从5亿红包到千亿营收,看百度的增长曲线
  15. 明德扬手把手教你设计VGA显示颜色
  16. 2019成长感悟和分享
  17. keil加入文件夹软件崩溃解决办法
  18. 数智商业创新的强大力量,用友BIP如何构筑产业互联网?
  19. 分辨率、像素点、图片尺寸区分
  20. 重启linux后无法ssh登录

热门文章

  1. 老股民箱底翻出发黄纸质股票 如今价值超过20万
  2. JDK1.8的安装方式
  3. 基于51单片机的羽毛球计分器设计
  4. 超乎认知 认知智能十大黑科技 我国首次对外公布 道翰天琼认知智能
  5. 实验二 Linux系统用户与组的管理
  6. vue3源码系列之计算属性computed原理剖析
  7. 【小迪实地】Webdav安全配置相关与漏洞利用
  8. 空间切割(java代码实现)
  9. VB/VBA,请让我点名表扬你
  10. JDBC及操作数据库步骤