前言: NumPy 专门用于Python中的科学计算. 它能够高效地操纵含有随机记录的大型多维数组, 并且速度与处理小型多维数组几乎一样快. 它也可以当作通用数据的多维容器. NumPy 具有创建任意类型数组的能力, 这使它适合与通用数据库应用程序连接, 也使其成为以后机器学习使用最有用的库之一.
以下是使用NumPy包的代码. 代码中含有注释, 更易理解
1. NumPy数组的基本操作
# NumPy
import numpy as np # 导入NumPy的包
a = np.array([1, 4, 5, 8], float) # 创建一个浮点类型的NumPy数组
print(type(a)) # 输出变量的类型
# > <class 'numpy.ndarray'>
# 对数组进行操作
a[0] = 5 # 替换数组中的第一个元素
print(a)
# > [5. 4. 5. 8.]
b = np.array([[1, 2, 3], [4, 5, 6]], float) # 创建一个二维的numpy数组
b[0, 1] # 获取第一个数组的第二个元素
# >2.0
print(b.shape) # 输出数组形状的元组
# >(2, 3)
b.dtype # 返回存储数值的类型
# > dtype('float')
print(len(b)) # 返回第一个轴的长度,(也就是在一维上有几个元素)
# > 2
2 in b # 'in' 判断 元素2 是否在数组中
# > True
0 in b
# > False
# 使用重塑 'reshape': 在这里从一维到二维进行转化元素
c = np.array(range(12), float)
print(c)
print(c.shape)
print('---')
c = c.reshape((2, 6)) # 用新格式重塑数组
print(c)
print(c.shape)
# > [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.]
# (12,)
# ---
# [[ 0. 1. 2. 3. 4. 5.]
# [ 6. 7. 8. 9. 10. 11.]]
# (2, 6)
c.fill(0) # 使得数组中所有的值都替换为0
print(c)
#> [[0. 0. 0. 0. 0. 0.], [0. 0. 0. 0. 0. 0.]]
c.transpose() # 创建数组的转置
# >array([ 0. ,0.],[ 0. ,0.],[ 0. ,0.],[ 0. ,0.],[ 0. ,0.],[ 0. ,0.])
c.flatten() # 是数组变为一维(将整个数组压平)
# >array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,])
# 连接两个或以上数组
m = np.array([1,2],float)
n = np.array([3,4,5,6], float)
p = np.concatenate((m,n))
print(p)
# >[1,2,3,4,5,6]
print(p.shape)
# > (6,)
#“newaxis”:增加数组的维数
q = np.array([1,2,3], float)
q[:, np.newaxis].shape
# > (3, 1)
print(q[:, np.newaxis])
# > [[1.],[2.],[3.]]
i = np.array([[1,2,3],[4,5,6]], float)
print(i[:,0])
# > [1. 4.]
2. 数组的常用函数
NumPy 还有其他函数, 例如 zeros、ones、zeros_like、ones_like、identity、eye,它们用于创建填充了0和1的数组,或是指定了维度的数组
加法、减法和乘法可以应用于相同大小的数组。NumPy中乘法是元素间相乘,而不是矩阵乘法。如果数组的大小不匹配,则较小的数组会被重复,以执行所需的运算,下面是一个例子:
a1 = np.array([[1,2],[3,4],[5,6]], float)
a2 = np.array([-1,3], float)
print(a1 + a2)
#> [[0. 5.],[2. 7.],[4. 9.]]
需要注意的是:pi 和 e 以常数的形式包含于 NumPy 中。
NumPy 提供了一些可直接用于数组的函数:sum(求和)、prod(元素的积)、mean(元素的平均值)、var(元素的方差)、std(元素的标准差)、argmin(数组中最小元素的索引)、argmax(数组中最大元素的索引)、sort(对元素排序)、unique(数组中的唯一元素)
a3 = np.array([[0,2],[3,-1],[3,5]], float)
print(a3.mean(axis=0)) # 元素列平均
print(a3.mean(axis=1)) # 元素行平均
a4 = np.array([0,0,0], float)
print(np.unique(a3)) #unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表
# > [2. 2.]
# [1. 1. 4.]
#> [-1. 0. 2. 3. 5.]
3. NumPy 的其他函数
NumPy 提供了用于测试数组中是否存在某些数值的函数,例如nonzero(检查非零元素)、isnan(检查“非数字”元素)和isfinite(检查有限元素)。where函数的返回值是一个数组,其中元素满足函数后面的条件,np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y
# 当是np.where(condition, x, y)
aa = np.arange(10)
np.where(aa,1,-1)
# > array([-1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) # 0为False,所以第一个输出-1
# 当是 np.where(condition)
a = np.array([2,4,6,8,10])
np.where(a > 5) # 返回索引
#array([2, 3, 4]),)
a[np.where(a > 5)] # 等价于 a[a>5]
#array([ 6, 8, 10])
若要生成不同长度的随机数,可以使用NumPy中的random函数
np.random.rand(2,3)
# > array[[0.13496664 0.87039504 0.02251768]
# [0.43616716 0.76776217 0.8041952 ]]
注:随机数种子可通过numpy.random.seed(1234)设定。NumPy通过马特赛特旋转演算法生成伪随机数。