python笔记之NUMPY中的掩码数组numpy.ma.mask
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中的掩码数组numpy.ma.mask相关推荐
- python 空矩阵_在NumPy中创建空数组/矩阵的方法
如何在NumPy中创建空数组/矩阵? 在添加行的情况下,你最好的选择是创建一个与数据集最终一样大的数组,然后向它添加数据 row-by-row: >>> import numpy & ...
- python第三方库numpy-Python中的第三方库——Numpy
这里快速学习一下Python 中一个非常重要的第三方库 NumPy. 它不仅是 Python 中使用最多的第三方库,而且还是 SciPy.Pandas 等数据科学的基础库.它所提供的数据结构比 Pyt ...
- 数据分析-----NumPy中的ndarray数组
目录 Numpy概述 Python中的数组 NumPy中的ndarray ndarray中的数据类型 ndarray多维数组属性 ndarray的创建 NumPy 切片和索引 NumPy 线性代数 总 ...
- python三维数组怎么表示_python – numpy中的三维数组
你有一个截断的数组表示.让我们看一个完整的例子: >>> a = np.zeros((2, 3, 4)) >>> a array([[[ 0., 0., 0., 0 ...
- python如何创建三维数组_python – numpy中的三维数组
你有一个截断的数组表示.让我们看一个完整的例子: >>> a = np.zeros((2, 3, 4)) >>> a array([[[ 0., 0., 0., 0 ...
- C语言学习笔记---结构体中的字符数组和字符指针
在结构体中可以使用字符数组来存储字符串,也可以使用字符指针来存储字符串.比如: struct str{char s1[5];char s2[5];};struct str str1= {" ...
- python ndarray合并_python中多维数组ndarray合并
numpy中ndarray的多维度上的合并 实现matlab data1=[r.*cos(t),r.*sin(t)];的功能: 实现matlab data=[data1;data2];的功能 dat ...
- python数组对应元素相乘_python – 将一个数组的每一行与numpy中另一个数组的每个元素相乘...
使用 broadcasting – A[:,None,:]*B[:,:,None] 由于np.einsum也支持广播,你也可以使用它(感谢@ajcr建议这个简洁的版本) – np.einsum('ij ...
- Python3.x Numpy中的array数组_矩阵操作
- 将array数组转换为矩阵 import math import numpy as np C_zd=np.array([7,5,7,2,42,54,45,43,10,8,15,14]).resha ...
最新文章
- Struts2 关于返回type=chain的用法.
- mysql去掉两个最高分_如何计算去掉一个最高分和一个最低分后的平均分?
- 基于MDA的移动应用开发建模及实现
- 修改用户名_新华美育查找用户名及修改密码的方法分享
- Access把每一天的数据累加_7天学会Power BI分析淘宝数据
- Struts2知识点总结
- pattern recognition and machine learning基本思想1:最大似然估计
- NYOJ-拦截导弹(dp)
- C++程序代码:利用【函数】——画正三角形、倒三角形
- 更换ssh通信证书,ssh更改公钥和密钥,以保证服务器安全
- JMeter基础 — JMeter中BeanShell断言详解
- 微信小程序开发之路(3)— 添加一个Button按钮点击事件
- qt 获取用户缩放,Qt-如何创建随窗口缩放并保持纵横比的图像?
- Catfish任意代码执行漏洞 0day
- 程序员如何摆脱天天CRUD这种打杂状态?
- 以智能卡平台为硬件的嵌入式加密IC的优势
- 【深一点学习】BP网络,结合数学推导的代码实现
- 谁是外汇市场的主要参与者?
- http,https,TCP,UDP,apache 的ab,压测工具
- 资深分享——管理营销团队的方法和技巧
热门文章
- java的class文件反编译工具jad的应用
- Aurora 数据库支持多达五个跨区域只读副本
- Compose 实现手写春联效果
- 别再研究秒杀茅台了,小伙用爬虫捡漏买奔驰!
- 计算机课设微程序最大值,计算机组成原理课程设计(微程序)报告
- java 获取下一年_JAVA获取下一年,下个月,下一天;月份为何以0开始?
- 想做web前端的小伙伴注意了,未来这些发展方向可以试试!
- P1497 木牛流马 题解
- 大数据概述、前世今生、处理流程、学习路线、开发工具详解
- “全渠道”难道又是电商对实体店的一场“新骗局”?