本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享

List (列表)是 Python 中最基本的数据结构。在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始。因此,我们可以使用 list[1] 来获取下标对应的值。如果我们深入下列表的底层原理,会发现列表是基于 PyListObject 实现的。PyListObject 是一个变长对象,所以列表的长度是随着元素多少动态改变的。同时它还支持插入和删除等操作,所以它还是一个可变对象。

可以简单理解为,Python 的列表是长度可变的数组。一般而已,我们用于列表创建都是一维数组。那么问题来,我们如果创建多维数组呢?

01 列表能创建多维数组?

列表是支持操作符,如果一个列表与 ‘ * ’ 号结合使用,能达到重复列表的效果。比如

那么利用这个重复特性,我们是否可以来创建一个二维数组呢?于是乎,我进行一顿猛操作,结果就被我折腾出来了。

看起来很完美的操作,但是如果进行一些列表更新操作,问题就显露出来了。比如我对 list_two 的更换中间位置的值,即对 list_two[1][1] 进行更换值。

不难发现,运行结果有点不对劲,列表中有三个位置的值也改变了。

为什么会出现在这种情况呢?原因是浅拷贝,我们以这种方式创建的列表,list_two 里面的三个列表的内存是指向同一块,不管我们修改哪个列表,其他两个列表也会跟着改变。

如果要使用列表创建一个二维数组,可以使用生成器来辅助实现。

我们对 list_three 进行更新操作,这次就能正常更新了。

除了以上的方式,还有一种更加简洁方便的方式,就是使用 NumPy 模块。

02 相比 List,NumPy 数组的优势

NumPy 全称为 Numerical Python,是 Python 的一个以矩阵为主的用于科学计算的基础软件包。NumPy 和 Pandas、Matpotlib 经常结合一起使用,所以被人们合称为数据分析三剑客。Numpy 中有功能强大的 ndarray 对象,能创建 N 维的数组,另外还提供很多通用函数,支持对数组的元素进行操作、支持对数组进行算法运算以及提供常用的统计函数。

相比 List 对象,NumPy 数组有以下优势:这是因为列表 list 的元素在系统内存中是分散存储的,而 NumPy 数组存储在一个均匀连续的内存块中。这样数组计算遍历所有元素,不像列表 list 还需要对内存地址进行查找,从而节省了计算资源。

Numpy数组能够运用向量化运算来处理整个数组,速度较快;而 Python 的列表则通常需要借助循环语句遍历列表,运行效率相对来说要差。

NumPy 中的矩阵计算可以采用多线程的方式,充分利用多核 CPU 计算资源,大大提升了计算效率。

Numpy 使用了优化过的 C API,运算速度较快。

03 创建数组

前面说到 NumPy 的主要对面是 ndarray 对象,它其实是一系列同类型数据的集合。因为 ndarray 支持创建多维数组,所以就有两个行和列的概念。

创建 ndarray 的第一种方式是利用 array 方式。

其中 shape 是数组的一个属性,表示获取数组大小(有多少行,有多少列),如果是一维数组,则只显示(行,)。代码中打印出 nd_two 的形状,输出为(2,3),表示数组中有 2 行 3 列。

第二种办法则使用 Numpy 的内置函数

1 使用arange 或 linspace 创建连续数组。

虽然 np.arange 和 np.linspace 起到的作用是一样的,都是创建等差数组,但是创建的方式是不同的。

2 使用 zeros(),ones(),full() 创建数组

3 使用 eye() 创建单位矩阵

eye() 创建的数组特点是行数和列数都是一样。因为它创建出来的是单位矩阵,单位矩阵是正形矩阵,对角线的值均为 1,其他位置的值为 0。

4 使用 diag() 创建对角矩阵

diag() 是创建一个 NxN 的对角矩阵,对角矩阵是对角线上的主对角线之外的元素皆为 0 的矩阵。

5 使用 random 创建随机数组

numpy 中的 random 中有很多内置函数,能简单介绍其中的几种。

python创建二维数组的方法_Python创建二维数组的正确姿势相关推荐

  1. python三维数组表示方法_Python操作多维数组和矩阵

    如果需要处理更加复杂的情形,可能需要使用Python的数学模块包NumPy,链接地址:http://numpy.sourceforge.net/ 首先来看一个简单的二维表格.投掷两枚骰子时,有36种可 ...

  2. python一维数组使用方法_python中向一维数组添加元素的方法

    python 怎么将一个数组逆序输出?爱上了你,我才领略思念的滋味,分离的愁苦和妒忌的煎熬,还有那无休止的占有欲. python 怎么将一个数组逆序输出? 知道的告诉我咯.. 工具/材料:电脑.Pyt ...

  3. js中改变原数组的方法以及解决改变原数组的方法

    js中改变原数组的方法以及解决改变原数组的方法 参考文章: (1)js中改变原数组的方法以及解决改变原数组的方法 (2)https://www.cnblogs.com/Ingots/p/1151701 ...

  4. python二维数组去重复_python 去除二维数组/二维列表中的重复行方法

    python 去除二维数组/二维列表中的重复行方法 之前提到去除一维数组中的重复元素用unique()函数,如果要去除二维数组中的重复行该怎么操作呢? import numpy as np arr = ...

  5. python赋值的数组无序怎么办_Python的多维空数组赋值方法

    Python里面的list.tuple默认都是一维的. 创建二维数组或者多维数组也是比较简单. 可以这样: list1 = [1,2,] list1.append([3,4,]) 可以这样: list ...

  6. python二维数组怎么写_python的二维数组操作

    需要在程序中使用二维数组,网上找到一种这样的用法: #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0]] myList = [[0 ...

  7. python创建虚拟环境的方法_Python创建virtualenv(虚拟环境)方法

    本文目录 一 前言 二 通过virtualenv软件创建 三 在pycharm下创建 新建项目 四 已有项目使用和创建虚拟环境 五 参数说明 一 前言 需求: --公司之有一台服务器 -目前运行这一个 ...

  8. python定义数组的方法_Python数组定义方法详细介绍

    本文实例讲述了Python数组定义方法.分享给大家供大家参考,具体如下: Python中没有数组的数据结构,但列表很像数组,如: a=[0,1,2] 这时:a[0]=0, a[1]=1, a[[2]= ...

  9. java 二维数组 的方法和属性_Java一维数组和二维数组详解(Java必备知识)

    数组是最为常见的一种数据结构,分为一级数组,二维数组以及多维数组.是把相同数据类型的元素,用一个标识符封装到一起的基本类型数据序列或对象序列. 目录 一维数组 创建一维数组 给一维数组赋值 获取数组的 ...

最新文章

  1. MySQL-锁表处理
  2. 丰田pcwin是什么软件_丰田工机PCWin软件通讯设置及联机操作重点提示 - 图文 -...
  3. 推荐一个不到300k的Gif处理神器 - Gifsicle(免费下载)
  4. 9Linux服务器编程之:mkdir()函数和rmdir()函数
  5. 【Android】对话框 AlertDialog
  6. Linux Socket TCP/IP通信
  7. MIT Kimera阅读笔记
  8. Linux5配置jboss环境
  9. 数据结构实验之栈:行编辑器
  10. Theano3.7-练习之堆叠消噪自动编码器
  11. php 发送文本 设置头,php中header设置常见文件类型的content-type
  12. java foxpro_java解析FoxPro DBF数据文件
  13. NFT平台Polkamon将于3月31日在Polkastarter进行IDO
  14. EasyUI +MVC +EF实现增删改查
  15. 标书导出html,Python爬取比比网中标标书并保存成PDF格式
  16. 2019FME博客大赛——FME在室内地图数据构建中的应用
  17. 大数据面试题_数据仓库篇
  18. 《漫画算法》终于出电子书了!
  19. PTA 7-47 打印选课学生名单 (25 point(s))
  20. 《敏捷革命》读书笔记

热门文章

  1. Python使用pandas合并多个Excel文件
  2. vsphere通用配置_vSphere各版本功能对比及简介
  3. python数据预测案例_Python数据分析及可视化实例之疾病预测(分类)
  4. 力扣459. 重复的子字符串(KMP,JavaScript)
  5. php7.3 怎办么和apache,apache集成php7.3.5的详细步骤
  6. itext 7 设置页面大小_indesign页面设置技巧教程【indesign页面大小设置教程】
  7. mybatis-plus 会自动增加 order by_自动化常见问题:SCL、变压器、欧姆龙软件、机器人控制分享...
  8. C++之操作符重载探究(四):下标运算符重载
  9. linux vim打开乱码,linux下解决vim打开文件乱码现象
  10. byte集合是否相同_Go 语言设计哲学之十八:接口实现方法集合