python科学计算_numpy_线性代数/掩码数组/内存映射数组
1. 线性代数
numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行;
matrix对象由matrix类创建,其四则运算都默认采用矩阵运算,和matlab十>分相似:
a = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
a * a
matrix([[ 30, 36, 42],
[ 66, 81, 96],
[102, 126, 150]])
a + a
matrix([[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]])
a ** -1
matrix([[ -4.50359963e+15, 9.00719925e+15, -4.50359963e+15],
[ 9.00719925e+15, -1.80143985e+16, 9.00719925e+15],
[ -4.50359963e+15, 9.00719925e+15, -4.50359963e+15]])
由于numpy中已经有ndarray,再用matrix比较容易弄混;
矩阵乘积运算:
对于ndarray对象,numpy提供多种矩阵乘积运算:dot()、inner()、outer()
dot():对于两个一维数组,计算的是这两个数组对应下标元素的乘积和,即:内积;对于二维数组,计算的是两个数组的矩阵乘积;对于多维数组,结>果数组中的每个元素都是:数组a最后一维上的所有元素与数组b倒数第二维>上的所有元素的乘积和:
dot(a,b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
结果数组c,可以看做是数组a和b的多个子矩阵的乘积;
inner():对于一维数组,计算的是这两个数组的内积;对于多维数组,计算的结果数组中的每个元素是:数组a和b最后一维的内积,因此a和b的最后一>维长度必须相同:
inner(a,b)[i,j,k,m] = sum(a[i,j,:]*b[k,m,:])
outer():如果传入参数数组是多维数组,则先将此数组展平为一位数组,然后再进行计算,得到两个一维数组的外积:
outer([1,2,3],[4,5,6,7])
array([[ 4, 5, 6, 7],
[ 8, 10, 12, 14],
[12, 15, 18, 21]])
解线性方程组
对矩阵更加高级的运算在numpy的linalg模块中可以找到:
np.linalg.solve()传入两个参数数组,a为N*N的二维数组,b为长度为N的一维数组,满足 : a * x = b,解得x矩阵即是N元一次方程的解;
np.linalg.lstsq()传入的参数数组不要求a数组为正方形,方程的个数可以>少于未知数的个数,lstsq()计算得到的结果是使得| b - a * x |最小的一>组解,这组解称为最小二乘解,使得所有等式的误差的平方和最小。
2. 掩码数组
numpy.ma模块中提供掩码数组的处理,这个模块中几乎完整复制了numpy中的所有函数,并提供掩码数组的功能;
一个掩码数组由一个正常数组和一个布尔数组组成,布尔数组中值为True的>元素表示正常数组中对应下标的值无效,False表示有效;
创建掩码数组:
创建掩码数组:
import numpy.ma as ma
x = np.array([1,2,3,5,7,4,3,2,8,0])
mask = x < 5
mx = ma.array(x,mask=mask)
mask
array([ True, True, True, False, False, True, True, True, False, True], dtype=bool)
mx
masked_array(data = [-- -- -- 5 7 -- -- -- 8 --],
mask = [ True True True False False True True True False True],
fill_value = 999999)
掩码数组具有三个属性:data、mask、fill_value;data表示原始数值数组>,mask表示获得掩码用的布尔数组,fill_value表示的填充值替代无效值之>后的数组,该数组通过filled()方法查看;
掩码数组可以使用各种下标对象对其进行存取,在被掩码的部分值为masked>,可以设置某个位置值为ma.masked使其失效;
3. 文件存取
numpy中提供多种存取数组内容的文件操作函数,保存的数组数据可以是二进制格式或者文本格式,二进制格式可以是无格式二进制和numpy专用的格式化二进制类型;
tofile()方法将数组数据写到无格式二进制文件中,tofile()输出的数据不>保存数组的形状和元素类型等信息;fromfile()函数可以读取无格式二进制>文件,此时,需要正确设置数组的元素类型dtype, 以及后续进行正确的形>状转换操作;如果指定了sep参数,则tofile()、fromfile()将以文本格式进行输入输出,sep指定文本的分隔符;
load()、save()将数组数据保存为numpy专用的二进制文件中,会自动处理元素类型和形状等信息;如果一次性保存多个数组,则可以使用savez(),savez()函数的第一个参数是文件名,其后的参数都是需要保存的数组,也可以使用关键字参数为数组起名字,非关键字参数数组则会自动命名为arr_0、arr_1、…等,savez()输出的是一个扩展名为npz的压缩文件,其中每个文件都是>一个用save()保存的npy文件,文件名和数组名相同。load()会自动识别npz>文件,并且返回类似字典的对象,通过数组名为键,可以提取其中的数组;
savetxt()、loadtxt()函数可以读写保存一维而二维数组的文本文件,输出>为间隔符分开的文本,通过delimiter参数指定间隔符;默认输出的格式为'%.18e',默认以空格分隔。
4. 内存映射数组
通过memmap()创建内存映射数组,该数组从文件中读取指定偏移量的数据,>而不会把整个文件读入到内存中;可传入参数:
filename:数组文件
dtype:[uint8],元素类型
mode:[r+],读取模式
offset:[0],偏移量
shape:读取的形状
order:[C],元素排列格式,默认为C语言格式,F为Fortran格式;
python科学计算_numpy_线性代数/掩码数组/内存映射数组的更多相关文章
- python科学计算_numpy_广播与下标
		
多维数组下标 多维数组的下标是用元组来实现每一个维度的,如果元组的长度比维度大则会出错,如果小,则默认元组后面补 : 表示全部访问: 如果一个下标不是元组,则先转换为元组,在转换过程中,列表和数组的转 ...
 - python科学计算_numpy_函数库
		
1.常规函数与排序 常用统计函数: 求和:sum().均值:mean().标准差:std().方差:var().最小值:min().最大值:max().最大值与最小值之差:ptp().最大值的下标:a ...
 - Python科学计算库
		
Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...
 - Python科学计算基础包-Numpy
		
一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能: 快速高效的多维数组对象ndarray. 用于对数组执行元素级计算以及直接对数 ...
 - Python科学计算库Numpy
		
Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...
 - Python科学计算类库
		
Numpy是什么 Numpy是一个开源的Python科学计算库.使用Numpy,就可以很自然地使用数组和矩阵.Numpy包含很多实用的数学函数,涵盖线性代数运算.傅里叶变换和随机数生成等功能. 矩阵: ...
 - windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
		
安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...
 - Python科学计算之Pandas
		
Reference: http://mp.weixin.qq.com/s?src=3×tamp=1474979163&ver=1&signature=wnZn1UtW ...
 - python 科学计算及数据可视化
		
第一步:利用python,画散点图. 第二步:需要用到的库有numpy,matplotlib的子库matplotlib.pyplot numpy(Numerical Python extensions ...
 
随机推荐
- 一个简易的服务框架lsf
			
项目地址:https://github.com/jianliu/lsf 主体思路是利用javaassist实现一个代理类,代理java的接口,实现每一个方法,实现的代码是对每个方法的名称.参数构建一个 ...
 - HDU4466 Triangle
			
题意:给一个长为N的铁丝,问你有几种方法将其划分为若干段,使得每一段都能围成一个边长为整数的三角形,并且围成的三角形都相似 思路其实很明显,三角形的周长必定是N的约数,那么答案就是周长C能围城的三角形 ...
 - Secret 的使用场景 - 每天5分钟玩转 Docker 容器技术(109)
			
我们可以用 secret 管理任何敏感数据.这些敏感数据是容器在运行时需要的,同时我们不又想将这些数据保存到镜像中. secret 可用于管理: 用户名和密码. TLS 证书. SSH 秘钥. 其他小 ...
 - libgdx3D第三讲-场景载入
			
第三讲 场景载入 Loading a scene with LibGDX 网易云地址:id=442771fd5cc6ce8cf9fd30b838a76343&type=note" s ...
 - (四)—性能测试工具curl-loader(linux)
			
curl-loader介绍 curl-loader(也被称为"omes-NIK"和"davilka")是一个开源的C语言编写的工具,模拟应用负载和成千上万的几十 ...
 - JAVA入门[2]-安装Maven
			
一.资料 1.官网: https://maven.apache.org/ 二.下载Maven 下载地址:https://maven.apache.org/download.cgi# 三.Windows ...
 - python自动化--字符串和整数的转换,while的循环体
			
字符串(str)和整数(int)类型变量的结合 *遵循只有同一类型的变量才可以结合. *不同类型的变量之间的转换 实例:实现打印出"192.168.100"和1的结合出" ...
 - ABP 框架启程
			
准备动手写一套电商的系统,辗转收集了不少相关的开源项目,最后决定使用ABP作为起点. 在园子里好多人都在推广ABP.有个园友做了一个集合贴,方便大家使用 ABP集合贴 建议大家优先看 HK Zhan ...
 - 用maven建立java web项目
			
1.在eclipse的菜单栏选择File->New->Other->Maven->Maven ,并在第一个框打勾,然后点击下一步 2.转换为java的Dynamic Web P ...
 - SDWebimage如何获取缓存大小以及清除缓存
			
sdwebimage如何获取缓存大小以及清除缓存 1.找到SDImageCache类 2.添加如下方法: - (float)checkTmpSize { float totalSize = 0; ...