学习笔记——Numpy基本操作(二)

为了方便我把本文介绍的一些函数全部列举了
数学函数
三角函数: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值