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 ...
随机推荐
- yii2.0中添加二维数组,多条数据。
/** * @inheritdoc 批量添加 * @params $add array 添加数据 */public function add_all($add){ $connection = \Yii ...
- 自动化运维工具——puppet详解(一)
一.puppet 介绍 1.puppet是什么 puppet是一个IT基础设施自动化管理工具,它能够帮助系统管理员管理基础设施的整个生命周期: 供应(provisioning).配置(configur ...
- javascript设计模式——职责链模式
前面的话 职责链模式的定义是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.职责链模式的名字非常形象,一 ...
- Microsoft Flow 概览
作者:陈希章 发表于 2017年12月15日 前言 纵观一下我们周围的世界,以及我们每天忙忙碌碌的工作,你会"惊奇地"发现它们都是一个事件接着一个事件发生的.例如,我每天早上起来, ...
- Sql Server 的服务器类型
Sql Server 提供了四种服务器类型: 如图所示 : 1, 数据库引擎 2, Analysis Services (分析服务 ) 3, Reporting Services (报告服务) ...
- 二叉树的递归遍历 天平UVa839
题意:输入一个树状的天平,利用杠杆原理,根据力矩是否相等(W1D1==W1D2)判断天平是否平衡 解题思路:1.由于判断天平是否平衡,当W1和W2都为0的时候,会先输入左子树,再输入右子树 2.此时的 ...
- Java爬虫——人人网模拟登录
人人网登录地址:http://www.renren.com/ 此处登录没有考虑验证码验证码. 首先对登录方法进行分析 有两种方法. 一)在Elements中分析源码 发现登录点击后的事件是http:/ ...
- 移植 MQTT broker mosquitto 到 omapl138
概述 本次移植使用创龙的 TL138-EVM 开发板,基于 TI 的 MCSDK 开发环境.具体上位机系统为 Ubuntu 12.04-32bit,软件环境基于创龙的用户手册搭建. 为了移植后在 13 ...
- Asp.Net Web API(二)
创建一个Web API项目 第一步,创建以下项目 当然,你也可以创建一个Web API项目,利用 Web API模板,Web API模板使用 ASP.Net MVC提供API的帮助页. 添加Model ...
- 【java】ArrayList、Iterator用法
package com.tn.collect; import java.util.ArrayList; import java.util.Iterator; class Product{ public ...