Python数据科学常用库——Numpy
Python数据科学常用库——Numpy
一、数组的创建与访问
0x1 创建一维数组
1 2 3 4 5 |
import numpy as np # create from python list list_1 = [1, 2, 3, 4] array_1 = np.array(list_1) |
0x2 创建二维数组
1 2 3 4 5 6 |
list_2 = [5, 6, 7, 8] array_2 = np.array([list_1, list_2]) >>> array([[1, 2, 3, 4], [5, 6, 7, 8]]) |
0x2 访问数组属性
1 2 3 4 5 6 7 |
array_2.shape # 数组类型 >>>(2,4) array_2.size # 数组大小 >>>8 array_2.dtype # 数组数据类型 >>>dtype('int64') # 取精确度最高的 |
0x3 特殊方法创建矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
array_4 = np.arange(1, 10, 2) # 创建1-10,步长为2 >>>array([1, 3, 5, 7, 9]) np.zeros(5) # 5个元素的零矩阵 >>>array([ 0., 0., 0., 0., 0.]) np.zeros([2,3]) # 二行三列的零矩阵 >>>array([[ 0., 0., 0.], [ 0., 0., 0.]]) np.eye(5) # 5x5单位矩阵 >>>array([[ 1., 0., 0., 0., 0.], [ 0., 1., 0., 0., 0.], [ 0., 0., 1., 0., 0.], [ 0., 0., 0., 1., 0.], [ 0., 0., 0., 0., 1.]]) |
0x4 访问数组元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 一维数组,下标和切片访问 a[1] a[1:5] # n维数组,下标和切片访问 b = np.array([[1,2,3],[4,5,6]]) b[1][0] = 4 c = np.array([[1,2,3],[4,5,6],[7,8,9]]) c = array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) c[:2,1:] = array([[2, 3], [5, 6]]) |
二、数组与矩阵的运算
0x1 随机生成数组
1 2 3 4 5 6 |
import numpy as np np.random.randn(10) # 返回一个或一组样本,具有标准正态分布 np.random.randint(10, size=20) # 0-9,生成20个随机数 np.random.randint(10, size=(2,3)) # 0-9,生成2*3的矩阵 np.random.randint(10, size=20).reshape(4, 5) # 一维数组重塑为二维数组 |
0x2 数组的计算
加减乘除,除法运算中注意数组中不能有0.
对应位置相加减乘除
0x3 矩阵相关
1 2 3 4 5 6 7 8 9 10 |
# 矩阵的创建 np.mat([[1,2,3],[4,5,6]]) >>>matrix([[1, 2, 3], [4, 5, 6]]) np.mat(a) # 数组转换为矩阵 # 矩阵的运算 矩阵加减与数组相同 乘除需要满足矩阵运算应该满足的条件 |
0x3 数组常用函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
a = np.random.randint(10, size=20).reshape(4,5) np.unique(a) # 返回数组中唯一的数 >>>array([[4, 1, 2, 5, 3], [9, 8, 1, 4, 0], [5, 4, 8, 0, 2], [8, 6, 2, 4, 3]]) sum(a) # 数组每一列的元素的和 >>>array([26, 19, 13, 13, 8]) sum(a[0]) # 数组第一行的元素的和 >>>15 max(a[:,0]) # 数组第一列的和 >>>26 a.max() # 数组最大值 max(a[0]) # 数组第一行最大值 max(a[:,0]) # 数组第一列最大值 |
二、数组的输入与输出
0x1 使用pickle序列化numpy array
1 2 3 4 5 6 7 8 |
import pickle import numpy as np x = np.arange(10) f = open('x.pkl', 'wb') # 写二进制文件 pickle.dump(x, f) # 序列化到硬盘 f = open('x.pkl', 'rb') # 读二进制文件 pickle.load(f) |
0x2 使用sava序列化numpy array
1 2 3 4 5 6 7 8 9 |
x = np.arange(10) y = np.arange(20) np.save('one_array', x) # 序列化x np.load('one_array.npy') # 读x np.savez('two_array.npz', a=x, b=y) # 写入两个数组 c = np.load('two_array.npz') c['a'] c['b'] |