pyhton中x1, x2, = [0, 0] 是什么意思,有什么作用?

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

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

01 列表能创建多维数组?

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

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

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

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

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

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

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

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

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

相比 List 对象,NumPy 数组有以下优势:

  1. 这是因为列表 list 的元素在系统内存中是分散存储的,而 NumPy 数组存储在一个均匀连续的内存块中。这样数组计算遍历所有元素,不像列表 list 还需要对内存地址进行查找,从而节省了计算资源。
  2. Numpy数组能够运用向量化运算来处理整个数组,速度较快;而 Python 的列表则通常需要借助循环语句遍历列表,运行效率相对来说要差。
  3. NumPy 中的矩阵计算可以采用多线程的方式,充分利用多核 CPU 计算资源,大大提升了计算效率。
  4. Numpy 使用了优化过的 C API,运算速度较快。

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

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

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

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

# 创建一个 3x4 的数组且所有值全为 0 # 创建一个 3x4 的数组且所有元素值全为 1 # 创建一个 3x4 的数组,然后将所有元素的值填充为 2

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

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

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

# 创建 2x2 数组且所有值是随机填充
本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享

「极客猴」每周坚持分享 Python 原创干货的公众号。包括基础入门,进阶技巧,网络爬虫,数据分析, Web 应用开发等,欢迎关注。

我要回帖

更多关于 宝马x1和x2哪个值得买贴吧 的文章

 

随机推荐