关闭

python笔记之NUMPY中的掩码数组numpy.ma.mask

4869人阅读 评论(0) 收藏 举报

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
0
0
查看评论

numpy教程:numpy基本数据类型及多维数组元素存取

http://blog.csdn.net/pipisorry/article/details/39215089NumPy介绍Numpy(读作num-pie)是Python中的一个矩阵计算包,功能类似于MATLAB的矩阵计算。标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,...
  • pipisorry
  • pipisorry
  • 2014-09-11 23:58
  • 22814

Python之numpy教程(二):运算、索引、切片

1.numpy数组的特点在于,大小相等的数组之间,任何算数运算都会将运算应用到元素级。 请看下面的例子: arr = np.array([[1.,2.,3.],[4.,5.,6.]]) arr输出: array([[ 1., 2., 3.], [ 4., 5., 6.]]) ...
  • liangzuojiayi
  • liangzuojiayi
  • 2016-05-30 11:01
  • 21456

Python(9) Numpy, mask图像的生成

什么是掩膜(mask)数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的区域中对一个不透明的图形模板遮盖,继而下面的腐蚀或扩散将只影响选定的区域以外的区域。 图像掩膜与其...
  • GZHermit
  • GZHermit
  • 2017-07-26 19:48
  • 1240

图像处理中掩膜(mask)的意义

刚开始涉及到图像处理的时候,在opencv等库中总会看到mask这么一个参数,非常的不理解,在查询一系列资料之后,写下它们,以供翻阅。 数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”)
  • jinxiaonian11
  • jinxiaonian11
  • 2016-12-05 17:27
  • 33087

小强学Python+OpenCV之-1.4.4掩膜mask及位运算

小强学Python+OpenCV之-1.4.4掩膜mask及位运算
  • jacke121
  • jacke121
  • 2017-10-08 18:12
  • 592

用 python skimage做图像处理

导言:由于经常需要处理图像,习惯了matlab那么好用的图像处理工具箱,搬到python后有点不知所措了。搜了下python图像处理方面的库,好多PIL的教程,但是无奈的是PIL和numpy等结合不好,而且半天找不到图像处理的函数在哪里,只好作罢;终于搜到了skimage,:-),喜出望外,因为它是...
  • thesby
  • thesby
  • 2016-05-08 00:15
  • 18787

python 使用opencv 对图像mask处理

MASK图像掩膜处理在图像操作中有时候会用到掩膜处理,如果使用遍历法掩膜图像ROI区域对于python来讲是很慢的,所以我们要找到一种比较好的算法来实现掩膜处理。
  • lucky__ing
  • lucky__ing
  • 2017-11-17 12:48
  • 247

python_mask_array

掩码数组数据很大形况下是凌乱的,并且含有空白的或者无法处理的字符,掩码式数组可以很好的忽略残缺的或者是无效的数据点。掩码式数组由一个正常数组与一个布尔式数组组成,若布尔数组中为Ture,则表示正常数组中对应下标的值无效,反之False表示对应正常数组的值有效。 numpy.ma模块中提供掩码数...
  • liukai2918
  • liukai2918
  • 2017-11-01 21:59
  • 274

如何用python编写一个绘制马赛克图像的自写程序mask = np.zeros

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。 这篇教程将会展示如何用python的图形化包“Pygame”和基础的文件I/O来创建一个自写程序。这个程序将可以仿照给定的图片来创作一幅马赛克画。Python是一种非常强大的编程语言。它有着许多的内建函数...
  • c2a2o2
  • c2a2o2
  • 2017-04-28 09:40
  • 1216

Numpy掩码式数组

数据很大形况下是凌乱的,并且含有空白的或者无法处理的字符,掩码式数组可以很好的忽略残缺的或者是无效的数据点。掩码式数组由一个正常数组与一个布尔式数组组成,若布尔数组中为Ture,则表示正常数组中对应下标的值无效,反之False表示对应正常数组的值有效。创建方法为,首先创建一个布尔型数组,然后通过nu...
  • weixin_37895339
  • weixin_37895339
  • 2017-06-03 22:09
  • 822
    个人资料
    • 访问:89520次
    • 积分:786
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:34篇
    • 译文:0篇
    • 评论:3条
    最新评论