NumPy(Numerical Python) 是一个开源的Python 科学计算库,它是 Python科学计算库的基础,许多其他著名的科学计算库如Pandas、Scikit-learn等,都要用到NumPy 库的一些功能。
NumPy 允许在Python 中做向量和矩阵的运算,而且很多底层的函式都是用C 语言写的,将获得在普通 Python 中无法达到的运算速度。
检视NumPy 版本
import numpy as npprint(np.__version__)
输出结果:1.16.2
使用关键字 import 汇入 numpy模组,为了使用方便,通过关键字 as 对其进行别名处理。
NumPy的阵列为ndarray
别名为 array,numpy.array 与 标准Python 库类 array.array 不一样,标准库中只能处理一位阵列并且功能相对较少。a = np.array([7,2,9,10])
shape - 显示阵列的维度。为一个整数元祖,表示每个维度上的大学。对于一个 n 行 m列的矩阵来说,shape 就是 (n, m)。
a = np.array([[5.2,3.0,4.5],[9.1,0.1,0.3]])
a = np.array([[[1,11],[2,22],[12,21]],[[3,33],[4,44],[34,43]],[[5,55],[6,66],[56,65]],[[7,77],[8,88],[78,87]]])
当打印阵列时,NumPy以与巢状列表类似的方式显示它,具有以下布局:
最后一个轴从左到右打印,倒数第二个从上到下打印,其余的也从上到下打印,每个切片与下一个用空行分开。一维阵列被打印为行、二维为矩阵和三维为矩阵列表。
如下是ndarray的一维、二维、三维 阵列的视觉化表示。
ndarray 物件提供的关键属性:
ndarray.ndim:阵列的轴(维度)的个数。在Python世界中,维度的数量被称为rank。ndarray.shape:阵列的维度。这是一个整数的元组,表示每个维度中阵列的大小。对于有n行和m列的矩阵,shape将是(n,m)。因此,shape元组的长度就是rank或维度的个数 ndim。ndarray.size:阵列元素的总数。这等于shape的元素的乘积。ndarray.dtype:一个描述阵列中元素型别的物件。可以使用标准的Python型别建立或指定dtype。另外NumPy提供它自己的型别。例如numpy.int32、numpy.int16和numpy.float64。ndarray.itemsize:阵列中每个元素的字节大小。例如,元素为 float64 型别的阵列的 itemsize 为8(=64/8),而 complex32 型别的阵列的 itemsize 为4(=32/8)。它等于 ndarray.dtype.itemsize 。ndarray.data:该缓冲区包含阵列的实际元素。通常,我们不需要使用此属性,因为我们将使用索引访问阵列中的元素。
ones 和 zeros 系列函式
通常,阵列的元素最初是未知的,但它的大小是已知的。因此,NumPy提供了几个函式来建立具有初始占位符内容的阵列。这就减少了阵列增长的必要,因为阵列增长的操作花费很大。函式 zeros 建立一个由0组成的阵列,函式 ones 建立一个由1阵列的阵列,函式 empty 内容是随机的并且取决于储存器的状态。预设情况下,建立的阵列的dtype是 float64。
操作示例如下:
>>> np.zeros((3,4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
>>> np.ones((2,3,4), dtype=np.int16)
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]], dtype=int16)
>>> np.empty((2,3))
array([[5.2, 3. , 4.5],
[9.1, 0.1, 0.3]])
arange函式建立阵列
要建立数字序列,NumPy提供了一个类似于 range 的函式,该函式返回阵列而不是列表。arange函式为 arrange(start=None, stop=None, step=None, dtype=None),根据start 与 stop 指定的范围以及step 设定的步长,生成一个 ndarray。
>>> np.arange(12)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> np.arange(1,2,0.1)
array([1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9])
reshape 函式更改阵列形状
a=np.arange(24).reshape(4,3,2)T 转置操作
b=a.T