python科学计算_numpy_函数库
1.常规函数与排序
常用统计函数:
求和:sum()、均值:mean()、标准差:std()、方差:var()、最小值:min()、最大值:max()、最大值与最小值之差:ptp()、最大值的下标:argmax()、最小值的下标:argmin()、中值:median()
上述函数都可以指定axis,来沿着某一轴操作;除了mean()函数求均值,还可以使用average(),并且可以指定weights参数来指定权值,计算加权平均;argmax()和argmin()如果不指定axis参数,则返回平坦化后的下标;
排序函数:sort()、argsort();数组的sort()方法会对数组本身进行改变,而sort()函数则不会;sort默认axis=-1,即沿着最后一个轴进行排序;sort()函数返回一个新的排序后的数组而argsort()则返回排序后的下标数组,如:
import numpy as np
a = np.random.randint(0,10,size=(4,5))
array([[8, 2, 0, 3, 7],
[7, 0, 2, 7, 4],
[1, 8, 1, 1, 2],
[4, 6, 2, 1, 4]])
a.sort() #此时a数组会改变为排序后的数组;
a1 = np.sort(a) #此时a数组不变,得到的a1数组为:
array([[0, 2, 3, 7, 8],
[0, 2, 4, 7, 7],
[1, 1, 1, 2, 8],
[1, 2, 4, 4, 6]])
# 即沿着-1轴排序后的结果
idx = np.argsort(a)
idx
array([[2, 1, 3, 4, 0],
[1, 2, 4, 0, 3],
[0, 2, 3, 4, 1],
[3, 2, 0, 4, 1]])
此时,虽然idx.shape = (4,5),但是并不能直接使用a[idx]得到排序后的数组,因为idx是数组,所以numpy会在后面补:,等效于:a[idx,:],idx数组中的每个值访问a数组的0轴,当idx中的值超过a的0轴长度之后就会产生错误:IndexError: index 4 is out of bounds for axis 0 with size 4;所以使用idx来访问a得到排序后的数组,需要产生0轴的下标,通过np.ogrid对象可以生成:
x,_ = np.ogrid[:a.shape[0],:a.shape[1]]
右边的表达式生成a数组的grid,即各个轴的下标数组,取第一个元素即得到a数组的0轴下标数组:
array([[0],
[1],
[2],
[3]])
通过a[x,idx]可以正确访问到排序后的数组
2. 多项式函数
多项式函数是只包含加法和乘法,对一个变量的各次幂进行加法和乘法操作的函数:
f(x) = a[n]*x^n + a[n-1]*x^(n-1) + … + a[2]*x^2 + a[1]*x + a[0]
numpy中通过将变量x的各次幂(从高到底的顺序)系数即可表示一个多项式函数:
a = np.array([1.0,0,-2,1])
p = np.poly1d(a)
p是一个poly1d对象,此对象可以像函数一样调用,并且返回多项式的值,并且是一个ufunc对象,即可以以数组作为参数,得到相应的多项式值的数组;
poly1d对象可以进行四则运算,分别对应于多项式的四则运算,除法运算时,会返回包含两个值的元组,其中第一个值为商多项式(商式),第二个值为余数多项式(余式);
poly1d对象可以进行积分:deriv()和微分:integ()操作,得到新的多项式;
使用np.roots()函数,可以对多项式进行求根:
r = np.roots(p)
array([-1.61803399, 1. , 0.61803399])
使用np.poly()函数,可以将根转回多项式的系数:
np.poly(r)
array([ 1.00000000e+00, -1.22124533e-15, -2.00000000e+00,
1.00000000e+00])
使用np.polyfit()函数,可以对一组数据进行多项式拟合:
import matplotlib.pyplot as plt
plt.figure(figsize=(8,4))
for deg in [3,5,7]:
a = np.polyfit(x,y,deg)
error = np.abs(np.polyval(a,x)-y)
plt.plot(error)
plt.ylim(0,0.0001)
plt.show()
3.分段函数
通过三个函数实现分段操作:where()、select()、piecewise()
where(condition,x,y)函数类似于三目操作符,当condition为真时,返回x,否则返回y;如果x和y的形状不一致,则通过广播统一形状;
当分段的数量比较多时,where()函数写起来就比较复杂,select(condlist, choicelist)函数,通过一个长度为N的布尔数组列表,choicelist则是一个长度为N的存储候选值的数组列表,其中所有数组长度为M;
condlist可以形象地理解为多个分段的条件,N为分段的数量;choicelist则是每种条件下的取值,用if-elif-else表现为:
if condlist[0] :
choicelist[0]
elif condlist[1]:
choicelist[1]
elif condlist[2]:
choicelist[2]
等;
piecewise(x, condlist, funclist)函数是为了避免当分段比较多时,需要用很多的数组来存储分段结构,piecewise()函数可以直接通过分段列表计算出结果,而不需要中间的分段数组;和select()参数不同的是,funclist是一个函数列表,分别对应condlist中的条件执行;
4.统计函数
unique()函数返回参数数组中所有不同的值,并按照从小到大排序,相当于linux中的sort -u 命令;该函数有两个可选参数:
return_index: True 表示同时返回原始数组的下标;
return_inverse :True 表示同时返回重建原始数组用的下标数组;
bincount()函数统计整数数组中各个元素出现的次数(参数数组中所有的元素必须为非负数),返回数组中的第i个元素表示整数i在参数数组中出现的个数。
histogram(a, bins=10, range=None, normed=False, weights=None)函数对一维数组进行直方图统计;该函数返回两个一维数组:hist和bin_edges;
histogram2d()、histogramdd()对二维数组和n维数组进行直方图统计
python科学计算_numpy_函数库的更多相关文章
- python科学计算_numpy_线性代数/掩码数组/内存映射数组
1. 线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行: matrix对象由matrix类创建,其四则运算都默认采用矩阵运算, ...
- python科学计算_numpy_广播与下标
多维数组下标 多维数组的下标是用元组来实现每一个维度的,如果元组的长度比维度大则会出错,如果小,则默认元组后面补 : 表示全部访问: 如果一个下标不是元组,则先转换为元组,在转换过程中,列表和数组的转 ...
- Python科学计算库
Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...
- Python科学计算库Numpy
Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...
- Python科学计算之Pandas
Reference: http://mp.weixin.qq.com/s?src=3×tamp=1474979163&ver=1&signature=wnZn1UtW ...
- Python科学计算基础包-Numpy
一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能: 快速高效的多维数组对象ndarray. 用于对数组执行元素级计算以及直接对数 ...
- python 科学计算及数据可视化
第一步:利用python,画散点图. 第二步:需要用到的库有numpy,matplotlib的子库matplotlib.pyplot numpy(Numerical Python extensions ...
- Python科学计算类库
Numpy是什么 Numpy是一个开源的Python科学计算库.使用Numpy,就可以很自然地使用数组和矩阵.Numpy包含很多实用的数学函数,涵盖线性代数运算.傅里叶变换和随机数生成等功能. 矩阵: ...
- windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...
随机推荐
- C++雾中风景4:多态引出的困惑,对象的拷贝?
C++作为一门面向对象的语言,自然具备了面向对象的三大特征:封装,继承,多态.在学习多态性质的过程中,发现了C++与其他语言很大的区别(坑?).在C++中的=操作符的使用与C++呈现的内存模型似乎并不 ...
- [CSS 混合模式]——mix-blend-mode/background-blend-mode简介
mix-blend-mode/background-blend-mode CSS3真是有很多的神奇的地方,这个两个元素你知道吗? 这是张大大拿过来的图,关于混合模式,借图一用. mix-blend-m ...
- google guava cache缓存基本使用讲解
代码地址:https://github.com/vikde/demo-guava-cache 一.简介 guava cache是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存 ...
- javascript设计模式——中介者模式
前面的话 程序由大大小小的单一对象组成,所有这些对象都按照某种关系和规则来通信.当程序的规模增大,对象会越来越多,它们之间的关系也越来越复杂,难免会形成网状的交叉引用.当改变或删除其中一个对象的时候, ...
- 我这样减少了26.5M Java内存!
WeTest 导读 历时五天的内存优化已经结束,这里总结一下这几天都做了什么,有哪些收获.优化了,或可以优化的地方都有哪些.(因为很多事还没做,有些结论需要一定样本量才能断定,所以叫一期)一期优化减少 ...
- Java爬虫——人人网模拟登录
人人网登录地址:http://www.renren.com/ 此处登录没有考虑验证码验证码. 首先对登录方法进行分析 有两种方法. 一)在Elements中分析源码 发现登录点击后的事件是http:/ ...
- (OK) Linux epoll模型—socket epoll server client chat
http://www.cnblogs.com/venow/archive/2012/11/30/2790031.html http://blog.csdn.net/denkensk/article/d ...
- 学习图像算法阶段性总结 (附一键修图Demo)
今天特别感慨.自己从决定研究图像处理.势必要做出一键修图算法. 经历了,三个多月的书籍积累,三个多月的算法调整以及优化. 人是一种奇怪的动物.当你做不到的时候,你以为做到了.自己会感觉非常爽,非常有成 ...
- Javascript--cookie创建与查看
创建cookie 以下代码将创建一个cookie,该cookie名称为UserName,值为Paul,过期时间为7天后(2015年6月29日) <span style="font-si ...
- 兔子-ps抠图
介绍2种方法:1.用高速选择工具 2.用铅笔工具 1.高速选择后.ctrl+c复制,新建空白图片,粘贴进去 2.用钢笔工具在图像的边缘定出若二个点,确定完毕之后按crtl+回车键选择.然后复制,新建空 ...