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

python笔记之NUMPY中的掩码数组numpy.ma.mask相关推荐

  1. python 空矩阵_在NumPy中创建空数组/矩阵的方法

    如何在NumPy中创建空数组/矩阵? 在添加行的情况下,你最好的选择是创建一个与数据集最终一样大的数组,然后向它添加数据 row-by-row: >>> import numpy & ...

  2. python第三方库numpy-Python中的第三方库——Numpy

    这里快速学习一下Python 中一个非常重要的第三方库 NumPy. 它不仅是 Python 中使用最多的第三方库,而且还是 SciPy.Pandas 等数据科学的基础库.它所提供的数据结构比 Pyt ...

  3. 数据分析-----NumPy中的ndarray数组

    目录 Numpy概述 Python中的数组 NumPy中的ndarray ndarray中的数据类型 ndarray多维数组属性 ndarray的创建 NumPy 切片和索引 NumPy 线性代数 总 ...

  4. python三维数组怎么表示_python – numpy中的三维数组

    你有一个截断的数组表示.让我们看一个完整的例子: >>> a = np.zeros((2, 3, 4)) >>> a array([[[ 0., 0., 0., 0 ...

  5. python如何创建三维数组_python – numpy中的三维数组

    你有一个截断的数组表示.让我们看一个完整的例子: >>> a = np.zeros((2, 3, 4)) >>> a array([[[ 0., 0., 0., 0 ...

  6. C语言学习笔记---结构体中的字符数组和字符指针

      在结构体中可以使用字符数组来存储字符串,也可以使用字符指针来存储字符串.比如: struct str{char s1[5];char s2[5];};struct str str1= {" ...

  7. python ndarray合并_python中多维数组ndarray合并

    numpy中ndarray的多维度上的合并 实现matlab data1=[r.*cos(t),r.*sin(t)];的功能: 实现matlab  data=[data1;data2];的功能 dat ...

  8. python数组对应元素相乘_python – 将一个数组的每一行与numpy中另一个数组的每个元素相乘...

    使用 broadcasting – A[:,None,:]*B[:,:,None] 由于np.einsum也支持广播,你也可以使用它(感谢@ajcr建议这个简洁的版本) – np.einsum('ij ...

  9. 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 ...

最新文章

  1. Struts2 关于返回type=chain的用法.
  2. mysql去掉两个最高分_如何计算去掉一个最高分和一个最低分后的平均分?
  3. 基于MDA的移动应用开发建模及实现
  4. 修改用户名_新华美育查找用户名及修改密码的方法分享
  5. Access把每一天的数据累加_7天学会Power BI分析淘宝数据
  6. Struts2知识点总结
  7. pattern recognition and machine learning基本思想1:最大似然估计
  8. NYOJ-拦截导弹(dp)
  9. C++程序代码:利用【函数】——画正三角形、倒三角形
  10. 更换ssh通信证书,ssh更改公钥和密钥,以保证服务器安全
  11. JMeter基础 — JMeter中BeanShell断言详解
  12. 微信小程序开发之路(3)— 添加一个Button按钮点击事件
  13. qt 获取用户缩放,Qt-如何创建随窗口缩放并保持纵横比的图像?
  14. Catfish任意代码执行漏洞 0day
  15. 程序员如何摆脱天天CRUD这种打杂状态?
  16. 以智能卡平台为硬件的嵌入式加密IC的优势
  17. 【深一点学习】BP网络,结合数学推导的代码实现
  18. 谁是外汇市场的主要参与者?
  19. http,https,TCP,UDP,apache 的ab,压测工具
  20. 资深分享——管理营销团队的方法和技巧

热门文章

  1. java的class文件反编译工具jad的应用
  2. Aurora 数据库支持多达五个跨区域只读副本
  3. Compose 实现手写春联效果
  4. 别再研究秒杀茅台了,小伙用爬虫捡漏买奔驰!
  5. 计算机课设微程序最大值,计算机组成原理课程设计(微程序)报告
  6. java 获取下一年_JAVA获取下一年,下个月,下一天;月份为何以0开始?
  7. 想做web前端的小伙伴注意了,未来这些发展方向可以试试!
  8. P1497 木牛流马 题解
  9. 大数据概述、前世今生、处理流程、学习路线、开发工具详解
  10. “全渠道”难道又是电商对实体店的一场“新骗局”?