《手把手陪您学Python》48——数组的生成方法1

在上一篇《手把手陪您学Python》47——ndarray中,我们学习了NumPy的ndarray,并通过对比Excel,了解了多维数组以及ndarray在处理多维数组方面的优势。

今天,我们将介绍ndarray的生成方法。

1、array()函数

生成ndarray最简单的方法就是使用array()函数,通过接收列表、字典、元组、集合等我们在入门阶段学习的序列型对象,生成数组。还可以通过接收其他的数组,生成一个新数组。

array函数就像我们之前学习的int()、str()、list()、tuple()、set()等函数一样,起到一个类型转换的作用。

下面通过几个实例来看一下array()是如何将其他序列型对象转化为数组的。

要使用NumPy里的函数或者方法,首先要使用我们在入门阶段学习的模块导入的方法,导入NumPy库,并按照习惯使用np作为别名,避免NumPy库中的函数和基础库发生冲突。

在后面的学习中,我们也会使用同样的方法导入其他的库,并不再进行特别说明。

In [1]: import numpy as np

In [2]: data1 = [1, 2, 3, 4, 5, 6]   # 列表转化为数组
        np.array(data1)
Out[2]: array([1, 2, 3, 4, 5, 6])

In [3]: data2 = (1, 2, 3, 4, 5, 6)   # 元组转化为数组
        np.array(data2)
Out[3]: array([1, 2, 3, 4, 5, 6])

对于嵌套序列,如果每个元素的长度都相同,array函数将会自动将其转化为多维数组。

 

In [4]: data3 = [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]   # 嵌套列表转化为多维数组
        np.array(data3)
Out[4]: array([[ 1,  2,  3,  4,  5,  6],
        [ 7,  8,  9, 10, 11, 12]])

In [5]: data4 = ((1, 2, 3, 4, 5, 6), (7, 8, 9, 10, 11, 12))   # 嵌套元组转化为多维数组
        np.array(data4)
Out[5]: array([[ 1,  2,  3,  4,  5,  6],
        [ 7,  8,  9, 10, 11, 12]])

In [6]: data5 = ([1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12])   # 列表嵌套元组转化为多维数组
        np.array(data5)
Out[6]: array([[ 1,  2,  3,  4,  5,  6],
        [ 7,  8,  9, 10, 11, 12]])

In [7]: data6 = [(1, 2, 3, 4, 5, 6), (7, 8, 9, 10, 11, 12)]   # 元组嵌套列表转化为多维数组
        np.array(data6)
Out[7]: array([[ 1,  2,  3,  4,  5,  6],
        [ 7,  8,  9, 10, 11, 12]])

从以上转化过程我们可以看到,无论是列表转化成的数组,还是元组转化成的数组,最后的表现形式都是列表,对于多维数组就是嵌套数组。

事实上,这就是NumPy中数组的表示方法,即使用列表或者嵌套列表,表示一维或者多维数组。

至于前面的array,因为我们使用的是Jupyter Notebook,所以在没有使用print()函数时,会同时显示其格式。如果我们将结果打印一下,就会出现只由[]组成的数组表现形式了。

In [8]: data7 = [1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18]
        print(np.array(data7))
Out[8]: [[ 1  2  3  4  5  6]
         [ 7  8  9 10 11 12]
         [13 14 15 16 17 18]]

在上面的实例中,除了增加一组列表外,我们还省略的最外面的一层[]或者(),此时就会默认为是元组,就和我们之前在入门阶段所学的原则是一样的。我们可以通过直接打印data7的方法来验证一下:

In [9]: print(data7)
Out[9]: ([1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18])

可以看到,打印后外层的()就显示出来了,并且不会影响我们生成数组,所以我们后面可以省略最外面的一层(),只要知道它是一个元组就可以了。

当然了,也可以使用tpye()函数进行验证,大家可以试一下。

2、arange()函数

在入门阶段中,我们学习过生成整数数字序列列表的函数range(),大家可以点击链接《手把手陪您学Python》18——循环语句for回顾一下他的语法格式以及作用。

arange()函数可以说就是range()函数的数组版,他的作用是生成整数数字序列的数组,使用方法非常简单。

In [10]: np.arange(6)
Out[10]: array([0, 1, 2, 3, 4, 5])

In [11]: np.arange(1, 13)
Out[11]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

In [12]: np.arange(1, 13, 2)
Out[12]: array([ 1,  3,  5,  7,  9, 11])

In [13]: np.arange(13, 1, -2)
Out[13]: array([13, 11,  9,  7,  5,  3])

上面对arange()函数几种生成数组的方法进行了列举,与range()函数的方法相同,具体的解释这里就不过多介绍了,可以继续参考《手把手陪您学Python》18——循环语句for中的内容。

3、linspace()函数

arange()函数是在起点和终点之间按照指定的步长构建数组,而linspace()函数则是在起点和终点之间,按照指定的元素个数构建一个等差数组。

所以,如果间距是确定的,那么就用arange()函数;如果个数是确定的,那么就用linspace()函数。

如果不指定元素的个数,那么linspace()默认会生成50个元素。

In [14]: np.linspace(1, 10, 10)
Out[14]: array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

In [15]: np.linspace(10, 1, 10)
Out[15]: array([10.,  9.,  8.,  7.,  6.,  5.,  4.,  3.,  2.,  1.])

In [16]: np.linspace(1, 10)   # 未指定元素个数,默认50个元素
Out[16]: array([ 1.        ,  1.18367347,  1.36734694,  1.55102041,  1.73469388,
        1.91836735,  2.10204082,  2.28571429,  2.46938776,  2.65306122,
        2.83673469,  3.02040816,  3.20408163,  3.3877551 ,  3.57142857,
        3.75510204,  3.93877551,  4.12244898,  4.30612245,  4.48979592,
        4.67346939,  4.85714286,  5.04081633,  5.2244898 ,  5.40816327,
        5.59183673,  5.7755102 ,  5.95918367,  6.14285714,  6.32653061,
        6.51020408,  6.69387755,  6.87755102,  7.06122449,  7.24489796,
        7.42857143,  7.6122449 ,  7.79591837,  7.97959184,  8.16326531,
        8.34693878,  8.53061224,  8.71428571,  8.89795918,  9.08163265,
        9.26530612,  9.44897959,  9.63265306,  9.81632653, 10.        ])

​​​​​​可以看到,使用argange()和linspace()函数生成的数组都是一维的,至于生成多维数组的方法,我们会在下一篇进行介绍。

以上就是三种常用的生成数组的方法的介绍,同时也学习到了数组的表示方法。

下一篇,我们会学习数组的shape属性,敬请关注。

 

图片

 


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

要阅读《手把手陪您学Python》——NumPy系列文章的其他篇目,请关注公众号点击菜单选择,或点击下方链接直达。

《手把手陪您学Python》46——NumPy介绍

《手把手陪您学Python》47——ndarray

 


 

《手把手陪您学Python》系列文章入门阶段的篇目已经全部完成。

为更加清晰地展示Python入门阶段的知识体系,整理了如下的鱼骨图,以方便大家查阅。

图片

如要阅读相应篇目的内容,请关注公众号点击菜单选择,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

《手把手陪您学Python》11——字符串的格式化输出

《手把手陪您学Python》12——数字

《手把手陪您学Python》13——运算

《手把手陪您学Python》14——交互式输入

《手把手陪您学Python》15——判断语句if

《手把手陪您学Python》16——循环语句while

《手把手陪您学Python》17——循环的终止

《手把手陪您学Python》18——循环语句for

《手把手陪您学Python》19——第一阶段小结

《手把手陪您学Python》20——列表

《手把手陪您学Python》21——元组

《手把手陪您学Python》22——字典

《手把手陪您学Python》23——内置序列函数

《手把手陪您学Python》24——集合

《手把手陪您学Python》25——列表推导式

《手把手陪您学Python》26——自定义函数

《手把手陪您学Python》27——自定义函数的参数

《手把手陪您学Python》28——自定义函数的返回值

《手把手陪您学Python》29——匿名函数

《手把手陪您学Python》30——模块

《手把手陪您学Python》31——文件的打开

《手把手陪您学Python》32——文件的读取

《手把手陪您学Python》33——文件的关闭

《手把手陪您学Python》34——文件的写入

《手把手陪您学Python》35——数据的存储

《手把手陪您学Python》36——错误和异常处理

《手把手陪您学Python》37——程序的重构

《手把手陪您学Python》38——第二阶段小结

《手把手陪您学Python》39——面向对象

《手把手陪您学Python》40——类的定义、属性与实例化

《手把手陪您学Python》41——类的方法与实例方法

《手把手陪您学Python》42——类的魔法方法

《手把手陪您学Python》43——类的继承

《手把手陪您学Python》44——类的导入

《手把手陪您学Python》45——Python入门完结篇

For Fans:关注“亦说Python”公众号,回复“手47”,即可免费下载本篇文章所用示例语句。

亦说Python——Python爱好者的学习分享园地

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值