- Python数据分析从小白到专家
- 田越编著
- 702字
- 2021-05-19 18:13:41
4.2.2 创建一个数组
在NumPy库里,用n维数组的形式来表示一个n维矩阵。首先,可以用Python的常规类型(列表或者元组)来创建一个一维数组,示例如下:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_83_2.jpg?sign=1739551488-jdZQ7uKMTHvWoovVYgui5bp7yhRCSWFd-0-ff74d8893e6a2080699404ce8ab3f260)
输出结果:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_83_3.jpg?sign=1739551488-URZ9O2XNw6jGRfdSOlk14X9rMNYVzaSy-0-a94732a87c9c64a682bf9152f71e1755)
可见,用元组和列表创建的矩阵b和矩阵a,结果都是一样的,print(a==b)也证明了这一点。当然,也可以用迭代的方式快速创建,示例如下:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_83_4.jpg?sign=1739551488-MjEOH2SXGvWR9T5GIjOvlm930nelEdpo-0-85667338145d54e757e8b15e30b6422c)
输出结果:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_84_1.jpg?sign=1739551488-XP0mfquAshuTujPp9hJ92mRs8KeaKr41-0-71823414148b6c600c6af1f413d802af)
这里的arange()方法实际上是NumPy库重写了Python原来的range()方法,它们要完成的工作是一样的。reshape()用于“重塑”,它默认操作的对象是一维的(即使它本身是一维或者多维的,也认为它是一维的,或者说把操作对象先转化成一排排的数字,不计它的维度)。下面按照reshape(n,m)括号里给出的n行m列进行“重塑”操作,示例如下:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_84_2.jpg?sign=1739551488-N6ArUuOdzpkRuNGw6zRZwc90XXg1QAie-0-30ad367cc2b27854aeea758051b8c1f3)
输出结果:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_84_3.jpg?sign=1739551488-HJcJNDtGRKZ3HqMWeDtOIHyDCvybMwXq-0-4f7c70ab2ac5c9504c6b98d521da0398)
arange()方法只是类似于range()方法迭代整型变量的情况,若要迭代浮点数,则需要使用linspace()方法,示例如下:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_84_4.jpg?sign=1739551488-wvr4YuyMptz3ZBTQ8sXgTPGnurid73Ow-0-a14036291c4bd8a3473855c3b3f08818)
输出结果:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_84_5.jpg?sign=1739551488-dyBMUyhTbtVqO7r4GoxO4pM0hZZwCdrf-0-b48abc2d9d0d669b92c2505cd3127c3d)
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_85_1.jpg?sign=1739551488-uCiDxLuR5wqLm6EE5XhjPOeLF2kzXMPt-0-4ec79a214161911eda8ca99d897f397b)
可以看到,linspace()方法并不是简单地替代arange()方法,arange(0,53,3)的意思是从0到53以3为间隔进行迭代;而linspace(0,53,3)的意思是从0到53,化为3段。所以只有改成linspace(0,53,18)才可以得到想要的结果。需要注意的是,reshape(3,-1)将这行数重塑为3行n列,这出现在列数较多且不清楚有几列的情况下。
在生成矩阵(n维数组)时可以使用dtype参数指定数据类型,dtype默认是整型,如下输出的是整型、浮点型和复数型:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_85_2.jpg?sign=1739551488-4E5gEJbsU4Gq0S3muxM3ZJMbFdaDuBOm-0-a0df8a26bb7762897c2a037fc47bdb41)
输出结果:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_85_3.jpg?sign=1739551488-mMebOJBAelZhZFf88OBItiouiHT2XF6F-0-6d72843bfcdadc88ea1c999cdc3b3b52)
当然还有其他迅速生成矩阵的方法,例如,用zeros()方法生成“零矩阵”;用ones()方法生成“全一矩阵”;用empty()方法生成“随机浮点数矩阵”。另外,还有快速生成数学的指数e的大小和圆周率π的大小的方法。示例如下:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_85_4.jpg?sign=1739551488-0rcZRFKDwqpoxGjyFeE5xAIFMhjSa6Wg-0-ce2ac858293dd6b8c6e228722577f0bb)
输出结果:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_86_1.jpg?sign=1739551488-E3T6P9RCdQgLEId6XDH0DDRTuRFlhxNP-0-a5fe1e5b3f9f087b560ce4ad49ceebae)
可以看到,np.exp(n)实际上输出的是en,当n=1时,e的数值约为2.718 281 828 459 045。
在显示较长的矩阵时会用省略号省去,示例如下:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_86_2.jpg?sign=1739551488-vsdxWa0XrsuD9xAdm6lx7zIiQsZgMsvo-0-1bb0e5316986e1fc7948636e52ad999f)
输出结果:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_86_3.jpg?sign=1739551488-3JcZSZnaLJaI3sXETABAWMy82igZAtyp-0-ec3ab4e80427e6e8926c773d31820d0d)
该示例输出了一个1000行1000列的矩阵。