NumPy基本操作与常用函数
声明
本文涉及的代码基于python 3.6.5
numpy 1.14.3
使用numpy模块之前首先需要在代码之前导入该模块
import numpy as np
文中会用到world_alcohol.txt文件,其中的数据格式如下所示(第一行为标题):
Year,WHO region,Country,Beverage Types,Display Value
1986,Western Pacific,Viet Nam,Wine,0
1986,Americas,Uruguay,Other,0.5
1985,Africa,Cte d'Ivoire,Wine,1.62
1986,Americas,Colombia,Beer,4.27
创建数组
numpy.array()函数的输入参数可以是一个list或者是list of lists。
当输入参数为list时,我们得到一个一维数组。
vector = np.array([5, 10, 15, 20])
print(vector)
# [ 5 10 15 20]
当输入参数为list of lists时,我们可以得到一个矩阵。
matrix = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]])
print(matrix)
# [[ 5 10 15]
# [20 25 30]
# [35 40 45]]
我们可以使用numpy.arange()方法创建给定区间,固定步长的数组或矩阵,例如:
vector = np.arange(15)
print(vector) # [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
我们还可以使用ndarray的reshape方法得到自己想要形状的矩阵:
matrix = np.arange(21, 81, 3).reshape(4, 5)
print(matrix)
# [[21 24 27 30 33]
# [36 39 42 45 48]
# [51 54 57 60 63]
# [66 69 72 75 78]]
我们还可以利用numpy.zeros()方法和numpy.ones()方法获取全0矩阵和全1矩阵。
z = np.zeros((2, 3))
print(z)
# [[0. 0. 0.]
# [0. 0. 0.]]
o = np.ones((2, 3), dtype=int)
print(o)
# [[1 1 1]
# [1 1 1]]
我们还可以利用随机数创建矩阵:
# 利用[0, 1)之间的随机数创建2行3列的矩阵
r = np.random.random_sample((2, 3))
print(r)
# [[0.1013597 0.41281383 0.2252911 ]
# [0.4636549 0.92180822 0.60799557]]
# 利用[2, 7)之间的随机数创建2行3列的矩阵
r = 5 * np.random.random_sample((2, 3)) + 2
print(r)
# [[2.87507067 6.21924318 5.68927464]
# [4.96606253 4.44709691 2.54297613]]
# 利用[0, 20)之间的随机整数创建2行3列的矩阵
r = np.random.randint(0, 20, size=(4, 5))
print(r)
# [[19 0 7 15 0]
# [12 2 6 16 1]
# [10 15 12 19 11]
# [11 17 13 12 10]]
# # 利用标准正态分布创建2行2列的矩阵
r = np.random.randn(2, 3)
print(r)
# [[-0.10322776 0.64940133 -0.33607361]
# [-0.71023991 0.53969707 0.60760233]]
另外,numpy.linspace()方法也可以用来创建数组或矩阵,效果和numpy.arange()类似。
lin = np.linspace(2.0, 3.0, num=5)
print(lin)
# [2. 2.25 2.5 2.75 3. ]
需要注意的是,numpy.linspace()默认的是在闭区间内获取数据,可以设置endpoint=False设置为左闭右开区间。另外,numpy.arange()方法利用step参数设置区间步长,而numpy.linspace()方法利用num参数设置区间内获取的数据个数,默认是50个。
还有很多方法可以创建numpy数组或矩阵,后面发现会继续完善。
shape属性
我们可以使用ndarray.shape属性获取数组中的元素个数或者说数组的形状。
print(type(vector))
print(type(matrix))
print(vector.shape)
print(matrix.shape)
# <class 'numpy.ndarray'>
# <class 'numpy.ndarray'>
# (4,)
# (3, 3)
dtype属性
需要注意的一点是numpy数组中的每个值必须具有相同的数据类型,当利用lists创建数组时或者读取数据到数组中时,numpy将自动确定适当的数据类型。我们可以是使用numpy数组的dtype属性检查数组的数据类型
numbers = np.array([1, 2, 3, 4])
print(numbers.dtype) # int32
numbers = np.array([1, 2, 3, '4'])
print(numbers.dtype) # <U11
ndim属性
我们可以用ndim属性获取矩阵的维度。例如:
matrix = np.arange(6).reshape(2, 3)
print(