为了方便我把本文介绍的一些函数全部列举了
数学函数
三角函数:sin()、cos()、tan()
numpy.around()
numpy.floor()
numpy.ceil()
算术函数
加减乘除: add(),subtract(),multiply() 和 divide()
numpy.reciprocal()
numpy.power()
numpy.mod()
numpy.remainder()
统计函数
numpy.amin() 和 numpy.amax()
numpy.median()
numpy.mean()
标准差和方差:np.std和np.var numpy.sort()
排序、条件刷选函数
numpy.sort()
numpy.argsort()
numpy.where()
副本和视图 副本或深拷贝
线性代数 numpy.dot()
numpy.vdot()
numpy.inner()
numpy.matmul ()
numpy.linalg.det()
numpy.linalg.solve()
文章目录
Numpy 线性代数
NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明:
函数 | 描述 |
---|---|
dot | 两个数组的点积,即元素对应相乘 |
vdot | 两个向量的点积 |
inner | 两个数组的内积 |
matmul | 两个数组的矩阵积 |
determinant | 数组的行列式 |
solve | 求解线性矩阵方程 |
inv | 计算矩阵的乘法逆矩阵 |
numpy.dot()
对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积);对于二维数组,计算的是两个数组的矩阵乘 积;对于多维数组,它的通用计算公式如下,即结果数组中的每个元素都是:数组 a 的最后一维上的所有元素与数组 b 的倒数第二位上的所有元素 的乘积和:dot(a,b)[i,j,k,m] = sum(a[i,j,:]*b[k,:,m])
。numpy.vdot()
函数是两个向量的点积。 如果第一个参数是复数,那么它的 共轭复数会用于计算。 如果参数是多维数组,它会被展开。numpy.inner()
函数返回一维数组的向量内积。对于更高的维度,它返回最 后一个轴上的和的乘积。numpy.matmul
函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正 常乘积,但如果任一参数的维数大于2,则将其视为存在于最后两个索引 的矩阵的栈,并进行相应广播。numpy.linalg.det()
函数计算输入矩阵的行列式。行列式在线性代数中是非 常有用的值。 它从方阵的对角元素计算。 对于2×2 矩阵,它是左上和右 下元素的乘积与其他两个的乘积的差。numpy.linalg.solve()
函数给出了矩阵形式的线性方程的解。numpy.linalg.inv()
函数计算矩阵的乘法逆矩阵。- 逆矩阵(inverse matrix):设 A 是数域上的一个 n 阶矩阵,若在相同数域 上存在另一个 n 阶矩阵 B,使得: AB=BA=E ,则我们称 B 是 A 的逆矩阵, 而 A 则被称为可逆矩阵。
持久化
1、h5py
一个 HDF5 文件是一种存放两类对象的容器:dataset 和 group. Dataset 是类似于数
组的数据集,而 group 是类似文件夹一样的容器,存放 dataset 和其他 group。在使用
h5py 的时候需要牢记一句话:groups 类比词典,dataset 类比 Numpy 中的数组。
HDF5 的 dataset 虽然与 Numpy 的数组在接口上很相近,但是支持更多对外透明的
存储特征,如数据压缩,误差检测,分块传输。
详细文档:http://docs.h5py.org/en/stable/quick.html
示例:
import numpy as np
import h5py
N=1000
def pickle_serialization(): #序列化
with h5py.File('data.h5','w') as hf:
array = np.random.randn(N,N)
group = hf.create_group('group') #group相当于文件夹
group.create_dataset('dataset',data=array) #dataset相对于具体文件
print('Serialization:{}'.format(array))
def pickle_deserialization(): #反序列化
with h5py.File('data.h5','r') as hf:
for key in hf.keys():
group = hf.get(key)
for item in group.items():
print('after deserialization:{}'.format(group[item[0]]))
if __name__ == '__main__':
pickle_serialization()
pickle_deserialization()
2、cPickle
在 python 中,一般可以使用 pickle 类来进行 python 对象的序列化,而 cPickle 提供了一个更快速简单的接口,如 python 文档所说的:“cPickle – A faster pickle”。
cPickle 可以对任意一种类型的 python 对象进行序列化操作,比如 list,dict,甚至是一个类的对象等。而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复。
详细文档:https://docs.python.org/2.2/lib/node61.html
示例:
import pickle
import numpy as np
N=1000
def pickle_serialization(): #序列化
with open('data.pkl','wb') as f:
array = np.random.randn(N,N)
pickle.dump(array,f)
print('Serialization:{}'.format(array))
def pickle_deserialization(): #反序列化
with open('data.pkl','rb') as f:
array = pickle.load(f)
print('Deserialization:{}'.format(array))
if __name__ == '__main__':
pickle_serialization()
pickle_deserialization()
基本操作
NumPy 数学函数
1、NumPy 提供了标准的三角函数:sin()、cos()、tan()
注意:三角函数都是使用弧度制。
import numpy as np
a = np.array([0,30,45,60,90])
print ('不同角度的正弦值:')
# 通过乘 pi/180 转化为弧度
print (np.sin(a*np.pi/180))
print ('')
print ('数组中角度的余弦值:')
print (np.cos(a*np.pi/180))
print ('')
print ('数组中角度的正切值:')
print (np.tan(a*np.pi/180))
---------------------
执行结果:
不同角度的正弦值:
[0. 0.5 0.70710678 0.8660254 1. ]
数组中角度的余弦值:
[1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
6.12323400e-17]
数组中角度的正切值:
[0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
1.63312394e+16]
2、numpy.around() 函数返回指定数字的四舍五入值
import numpy as np
a = np.array([1.0,5.55, 123, 0.567, 25.532])
print ('原数组:')
print (a)
print ('')
print ('舍入后:')
print (np.around(a))
--------------
执行结果:
原数组:
[ 1. 5.55 123. 0.567 25.532]
舍入后:
[ 1. 6. 123. 1. 26.]
3、numpy.floor() 返回数字的下舍整数
import numpy as np
a = np.array([-1.7, 1.5, -0.2, 0.6, 10])
print ('提供的数组:')
print (a)
print ('')
print ('修改后的数组:')
print (np.floor(a))
-----------
执行结果:
提供的数组:
[-1.7 1.5 -0.2 0.6 10. ]
修改后的数组:
[-2. 1. -1. 0. 10.]
4、numpy.ceil() 返回数字的上入整数
import numpy as np
a = np.array([-1.7, 1.5, -0.2, 0.6, 10])
print ('提供的数组:')
print (a)
print ('')
print ('修改后的数组:')
print (np.ceil(a))
-------------------
执行结果:
提供的数组:
[-1.7 1.5 -0.2 0.6 10. ]
修改后的数组:
[-1. 2. -0. 1