版权声明:Copyright 慕白博客 https://geekmubai.com https://blog.csdn.net/geekmubai/article/details/86645804
Python数据科学常用库——Numpy
一、数组的创建与访问
0x1 创建一维数组
import numpy as np
# create from python list
list_1 = [1, 2, 3, 4]
array_1 = np.array(list_1)
0x2 创建二维数组
list_2 = [5, 6, 7, 8]
array_2 = np.array([list_1, list_2])
>>>
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
0x2 访问数组属性
array_2.shape # 数组类型
>>>(2,4)
array_2.size # 数组大小
>>>8
array_2.dtype # 数组数据类型
>>>dtype('int64') # 取精确度最高的
0x3 特殊方法创建矩阵
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 访问数组元素
# 一维数组,下标和切片访问
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 随机生成数组
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 矩阵相关
# 矩阵的创建
np.mat([[1,2,3],[4,5,6]])
>>>matrix([[1, 2, 3],
[4, 5, 6]])
np.mat(a) # 数组转换为矩阵
# 矩阵的运算
矩阵加减与数组相同
乘除需要满足矩阵运算应该满足的条件
0x3 数组常用函数
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
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
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']