# 2.1.1:ndarray对象 ## 怎样安装 NumPy NumPy (Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。是在学习机器学习、深度学习之前应该掌握的一个非常基本且实用的 python 库。 想要安装 NumPy 其实非常简单,进入命令行,输入如下代码即可: ```shell pip install numpy ``` ## 什么是 ndarray 对象 NumPy 为什么能够受到各个数据科学从业人员的青睐与追捧,其实很大程度上是因为 NumPy 在向量计算方面做了很多优化,接口也非常友好。而这些其实都是在围绕着 NumPy 的一个核心数据结构 ndarray 。 ndarray 的全称是 N-Dimension Arrary ,字面意义上其实已经表明了一个 ndarray 对象就是一个 N 维数组。但要注意的是,ndarray 是**同质**的。同质的意思就是说** N 维数组里的所有元素必须是属于同一种数据类型的**。**(PS: python 中的 list 是异质的)** ndarray 对象实例化好了之后,包含了一些基本的属性。比如 shape ,ndim , size , dtype 。其中: - shape : ndarray 对象的形状,由一个 tuple 表示 - ndim : ndarray 对象的维度 - size : ndarray 对象中元素的数量 - dtype : ndarray 对象中元素的数据类型,例如 int64 ,float32 等。 来看个例子,假设现在有一个 3 行 5 列的矩阵( ndarray )如下: ```python array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) ``` 那么该 ndarray 的 shape 是 (3, 5) 。(代表 3 行 5 列);ndim 是 2 (因为矩阵有行和列两个维度);size 是 15 (因为矩阵总共有 15 个元素); dtype 是 int32 (因为矩阵中元素都是整数,并且用 32 位整型足够表示矩阵中的元素); 打印这些属性的示例代码如下: ```python # 导入numpy并取别名为np import numpy as np # 构造ndarray a = np.arange(15).reshape(3, 5) # 打印a的shape,ndim,size,dtype print(a.shape) print(a.ndim) print(a.size) print(a.dtype) ``` 输出如下: ```python (3, 5) 2 15 int32 ``` ## 如何实例化 ndarray 对象 实例化 ndarray 对象的函数有很多种,但最为常用的函数是 array ,zeros ,ones 以及 empty 。 ### 使用 array 函数实例化 ndarray 对象 如果你手头上有一个 python 的 list ,想要将这个 list 转成 ndarray ,此时可以使用 NumPy 中的 array 函数将 list 中的值作为初始值,来实例化一个 ndarray 对象。代码如下: ```python import numpy as np # 使用列表作为初始值,实例化ndarray对象a a = np.array([2,3,4]) # 打印ndarray对象a print(a) ``` 输出如下: ```python [2, 3, 4] ``` ### 使用 zeros ,ones ,empty 函数实例化 ndarray 对象 通常在写代码的时候,数组中元素的值一般都喜欢先初始化成 0 ,如果使用 array 的方式实例化 ndarray 对象的话,虽然能实现功能,但显得很麻烦(**首先要有一个全是 0 的 list**)。那有没有简单粗暴的方式呢,有!!那就是 zeros 函数,你只需要把 ndarray 的 shape 作为参数传进去即可。代码如下: ```python import numpy as np # 实例化ndarray对象a,a是一个3行4列的矩阵,矩阵中元素全为0 a = np.zeros((3, 4)) # 打印ndarray对象a print(a) ``` 输出如下: ```python [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] ``` 如果想把数组中的元素全部初始化成 1 ,聪明的你应该能想到就是用 ones 函数,oens 的用法与 zeros 一致。代码如下: ```python import numpy as np # 实例化ndarray对象a,a是一个3行4列的矩阵,矩阵中元素全为1 a = np.ones((3, 4)) # 打印ndarray对象a print(a) ``` 输出如下: ```python [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] ``` 如果 01大法 满足不了你,想要用随机值作为初始值来实例化 ndarray 对象,empty 函数能够满足你。 empty 的使用方式与 zeros 和 ones 如出一辙,代码如下: ```python import numpy as np # 实例化ndarray对象a,a是一个2行3列的矩阵,矩阵中元素全为随机值 a = np.empty((2, 3)) # 打印ndarray对象a print(a) ``` 输出可能如下: ```python [[2.67276450e+185 1.69506143e+190 1.75184137e+190] [9.48819320e+077 1.63730399e-306 0.00000000e+000]] ```