Python 科学计算库 NumPy 基本操作
NumPy(Numerical Python) 是一个开源的Python 科学计算库,它是 Python科学计算库的基础,许多其他著名的科学计算库如Pandas、Scikit-learn等,都要用到NumPy 库的一些功能。
NumPy 允许在Python 中做向量和矩阵的运算,而且很多底层的函数都是用C 语言写的,将获得在普通 Python 中无法达到的运算速度。
查看NumPy 版本
import numpy as np
print(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