1. numpy.where(condition[,x,y]):它类似于python的 x if condition else y 。condition/x/y 都是数组,要求形状相同或者通过广播之后形状相同。产生结果的方式为:如果condition 某个元素为True或者非零,则对应的结果元素从x中获取;否则对应的结果元素从y中获取。
2. 如果分段数量增加,则需要嵌套多层的where()。 此时可以使用select():numpy.select(condlist,choicelist,default =0)。
x%2==1 ,则 1,3,5,7,9先选出来,并占据相应位置,然后看第二个条件,y%3 == 1, 则100,106选出来,并占据相应位置,然后 1004,选出来,剩余的都为true 并设置成-1.
3. 采用where/select
时,所有的参数需要在调用它们之前完成。在计算时还会产生许多保存中间结果的数组。因此如果输入数组很大,则将会发生大量内存分配和释放。 为此numpy
提供了piecewise
函数: numpy.piecewise(x, condlist, funclist, *args, **kw)
。
-
x
:为分段函数的自变量取值数组 -
condlist
:为一个列表,列表元素为布尔数组,数组形状和x
相同。 -
funclist
:为一个列表,列表元素为函数对象。其长度与condlist
相同或者比它长1。- 当
condlist[i]
对应位置为True
时,则该位置处的输出值由funclist[i]
来计算。如果funclist
长度比condlist
长1,则当所有的condlist
都是False
时,则使用funclist[len(condlist)]
来计算。如果有多个符合条件,则使用最后一个遇到的(而不是第一个遇到的) - 列表元素可以为数值,表示一个返回为常数值(就是该数值)的函数。
- 当
4. 多项式
一元多项式类的构造:(注意系数按照次数从高次到低次排列)
class numpy.poly1d(c_or_r, r=0, variable=None)
c_or_r
:一个数组或者序列。其意义取决于r
r
:布尔值。如果为True
,则c_or_r
指定的是多项式的根((x-n1)(x-n2)....=0的形式。);如果为False
,则c_or_r
指定的是多项式的系数。variable
:一个字符串,指定了打印多项式时,用什么字符代表自变量。默认为x。
多项式的属性有:
.coeffs
属性:多项式的系数。.order
属性:多项式最高次的次数。.variable
属性:自变量的代表字符。
多项式的方法有:
.deriv(m=1)
方法:计算多项式的微分。可以通过参数m
指定微分次数。.integ(m=1,k=0)
方法:计算多项式的积分。可以通过参数m
指定积分次数和k
积分常量。
操作一元多项式类的函数:
- 多项式对象可以像函数一样,返回多项式的值。
- 多项式对象进行加减乘除,相当于对应的多项式进行计算。也可以使用对应的。
numpy.polyadd/polysub/polymul/polydiv/
函数。 numpy.polyder/numpy.polyint
:进行微分/积分操作。numpy.roots
函数:求多项式的根(也可以通过p.r
方法)。
操作一元多项式类的函数:
- 多项式对象可以像函数一样,返回多项式的值
- 多项式对象进行加减乘除,相当于对应的多项式进行计算。也可以使用对应的
numpy.polyadd/polysub/polymul/polydiv/
函数。 numpy.polyder/numpy.polyint
:进行微分/积分操作numpy.roots
函数:求多项式的根(也可以通过p.r
方法)
使用np.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)
函数可以对一组数据使用多项式函数进行拟合(最小均方误差)。其参数为:
x
:数据点的x
坐标序列y
:数据点的y
坐标序列。如果某个x
坐标由两个点,你可以传入一个二维数组。deg
:拟合多项式的次数rcond
:指定了求解过程中的条件:当某个特征值/最大特征值<rcond
时,该特征值被抛弃full
:如果为False
,则仅仅返回拟合多项式的系数;如果为True
,则更多的结果被返回w
:权重序列。它对y
序列的每个位置赋予一个权重cov
:如果为True
,则返回相关矩阵。如果full
为True
,则不返回。
默认情况下,返回两个数组:一个是拟合多项式的系数;另一个是数据的相关矩阵。
numpy
提供了更丰富的多项式函数类。注意其中的多项式的系数按照次数从小到大排列。
numpy.polynomial.Polynomial
:一元多次多项式numpy.polynomial.Chebyshev
:切比雪夫多项式numpy.polynomial.Laguerre
:拉盖尔多项式numpy.polynomial.Legendre
:勒让德多项式numpy.polynomial.Hermite
:哈米特多项式numpy.polynomial.HermiteE
:HermiteE
多项式
所有的这些多项式的构造函数为: XXX(coef, domain=None, window=None)
。其中XXX
为多项式类名。domain
为自变量取值范围,默认为[-1,1]
。window
指定了将domain
映射到的范围,默认为[-1,1]
。
如切比雪夫多项式在
[-1,1]
上为正交多项式。因此只有在该区间上才能正确插值拟合多项式。为了使得对任何区域的目标函数进行插值拟合,所以在domain
指定拟合的目标区间。
所有的这些多项式可以使用的方法为:
- 四则运行
.basis(deg[, domain, window])
:获取转换后的一元多项式.convert(domain=None, kind=None, window=None)
:转换为另一个格式的多项式。kind
为目标格式的多项式的类.degree()
:返回次数.fit(x, y, deg[, domain, rcond, full, w, window])
:拟合数据,返回拟合后的多项式.fromroots(roots[, domain, window])
:从根创建多项式.has_samecoef(other)
、.has_samedomain(other)
、.has_sametype(other)
、.has_samewindow(other)
:判断是否有相同的系数/domain
/类型/window
.roots()
:返回多项式的根.trim([tol])
:将系数小于tol
的项截掉- 函数调用的方式