4.Python科学计算与数据处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
>>> p(np.linspace(0,1, 5)) array([ 1., 8.515625,0.125 , -0.078125, 0. ])
20
多项式函数
对poly1d对象进行加减乘除运算相当于对 相应的多项式函数进行计算。例如:
>>> p + [-2, 1] # 和 p + np.poly1d([-2, 1])相同 poly1d([ 1., 0., -4., 2.])
多项式对象的deriv()和integ()方法分别 计算多项式函数的微分和积分:
>>> p.deriv() poly1d([ 3., 0., -2.]) >>> p.integ() poly1d([ 0.25, 0., -1., 1. , 0.]) >>> p.integ().deriv() == p True
14
最值和排序
>>> np.argmax(a) #找到数组a中最大值的下标,有多个 最值时得到第一个最值的下标 2 >>> a.ravel()[2] #求平坦化之后的数组中的第二个元素 9
可以通过unravel_index()将一维下标转 换为多维数组中的下标,它的第一个参数为一 维下标值,第二个参数是多维数组的形状:
6
求和、平均值、方差
sum()默认使用和数组的元素类型相同的 累加变量进行计算,如果元素类型为整数,就使 用系统的默认整数类型作为累加变量。在32位系 统中,累加变量的类型为32 bit整型。因此对整 数数组进行累加时可能会出现溢出问题,即数组 元素的总和超过了累加变量的取值范围。而对很 大的单精度浮点数类型数组进行计算时,也可能 出现精度不够的现象,这时可以通过dtype 参数 指定累加变量的类型。在下面的例子中,我们对 一个元素都为1.1的单精度数组进行求和, 比较单 精度累加变量和双精度累加变量的计算结果:
11
更改数组的形状与数组堆叠
>>> a1
array([[ 7., 5.], [ 9., 3.], [ 7., 2.], [ 7., 8.], [ 6., 8.], [ 3., 2.]]) >>> a1.resize(2,6) >>> a1 array([[ 7., 5., 9., 3., 7., 2.], [ 7., 8., 6., 8., 3., 2.]])
7
求和、平均值、方差
>>> b =np.ones(1000000, dtype=np.float32) * 1.1 # 创建一个很大的单精度浮点数数组 >>> b # 1.1无法使用浮点数精示,存在一些误差 array([ 1.10000002, 1.10000002,…,1.10000002], dtype=float32) >>> np.sum(b) #使用单精度累加变量进行累加计算,误差将越来越大 1110920.5 >>>np.sum(b, dtype=np.double) #使用双精度浮点数则能够得 到正确的值 1100000.0238418579
13
最值和排序
用min()和max()可以计算数组的最大值 和最小值,而ptp()计算最大值和最小值之间的 差。 它们都有axis和out两个参数。这些参数 的用法和sum()相同。
>>>np.min(a2) 1.0பைடு நூலகம்>>>np.max(a2) 9.0 >>>np.ptp(a2) 8.0
用argmax()和argmin()可以求最大值和 最小值的下标。如果不指定axis参数,就返回 平坦化之后的数组下标,例如:
>>> np.median(a,axis=0) array([ 8. , 3. , 6. , 6.5, 1. ])
18
多项式函数
多项式函数是变量的整数次幂与系数的乘 积之和,可以用下面的数学公式表示: f(x)= anxn+an-1xn-1 +…+a2x2+a1x +a0 由于多项式函数只包含加法和乘法运算, 因此它很容易计算,并且可以用于计算其他数 学函数的近似值。在NumPy中,多项式函数的 系数可以用一维数组表示,例如f(x) = x3 -2x + 1可以用下面的数组表示,其中a[0]是最高 次的系数,a[-1]是常数项,注意x2的系数为0 。
9
求和、平均值、方差
除此之外,average()也可以对数组进行 平均计算。它没有out和dtype参数,但有一个 指定每个元素权值的weights参数,可在 IPython中输入“np.average?”来査看使用说 明。 std()和var()分别计算数组的标准差和方 差,有axis、out及dtype等参数。
3
求和、平均值、方差
sum()计算数组元素之和,也可以对列表 、元组等和数组类似的序列进行求和。当数组 是多维时,它计算数组中所有元素的和:
>>> a =np.random.randint(0,10,size=(4,5)) >>> a array([[7, 1, 9, 6, 3], [5, 1, 3, 8, 2], [9, 8, 9, 4, 0], [9, 5, 1, 7, 0]]) >>> np.sum(a) 97
10
更改数组的形状与数组堆叠
更改数组的形状:
>>> a1 = floor(10*random.random((3,4))) >>> a1 array([[ 7., 5., 9., 3.], [ 7., 2., 7., 8.], [ 6., 8., 3., 2.]]) >>> a1.shape (3, 4) >>> a1.ravel() # flatten the array array([ 7., 5., 9., 3., 7., 2., 7., 8., 6., 8., 3., 2.]) >>> a1.shape = (6, 2) >>> a1.transpose() array([[ 7., 9., 7., 7., 6., 3.], [ 5., 3., 2., 8., 8., 2.]])
下面的语句使用idx选择出每行的最大值:
>>> a[xrange(a.shape[0]),idx] array([9, 8, 9, 9])
16
最值和排序
数组的sort()方法用于对数组进行排序,它 将改变数组的内容。而sort()函数则返回一个新 数组,不改变原始数组。它们的axis参数默认值 都为-1,即沿着数组的最后一个轴进行排序。 sort()函数的axis参数可以设置为None,此时它 将得到平坦化之后进行排序的新数组。
>>> idx = np.unravel_index(2, a.shape) >>> idx (0, 2) >>> a[idx] 9
15
最值和排序
当使用axis参数时,可以沿着指定的轴计 算最大值的下标。例如下面的结果表示,在数 组 a中,第0行中最大值的下标为2,第1行中最 大值的下标为3:
>>> idx = np.argmax(a, axis=1) >>> idx array([2, 3, 0, 0])
NumPy
—函数库
1
目录
求和、平均值、方差 更改数组的形状与数组堆叠 最值和排序 多项式函数 分段函数 统计函数 解线性方程组
2
函数库
除了前面介绍的ndarray数组对象和 ufunc函数之外,NumPy还提供了大量对 数组进行处 理的函数。充分利用这些函数 ,能够简化程序的逻辑,提高运算速度。
>>> np.sum(a,axis=1) array([26, 19, 30, 22]) >>> np.sum(a, axis=0) array([30, 15, 22, 25, 5])
5
求和、平均值、方差
上面的例子将产生一个新的数组来保存 求和结果,如果希望将结果直接保存到另外 一个数组中,可以和ufunc函数一样使用 out参数指定输出数组,它的形状必须和结 果数组的形状相同。
23
多项式函数
17
最值和排序
argsort()返冋数组的排序下标,axis参 数的默认值为-1: >>>idx = np.argsort(a)
>>> idx array([[1, [1, [4, [4,
4, 4, 3, 2, 3, 2, 1, 1, 0, 0, 0, 3, 2], 3], 2], 0]])
用median()可以获得数组的中值,即对 数组进行排序之后,位于数组中间位置的值, 当长度是偶数时,得到正中间两个数的平均值 。它也可以指定axis和out参数:
>>> p*p #两个3次多项式相乘得到一个6次多项式 poly1d([ 1., 0., -4., 2., 4., -4., 1.])
>>> p / [1, 1] #除法返回两个多項式,分别为商式和余式 (poly1d([ 1., -1., -1.]), poly1d([ 2.]))
21
多项式函数
>>> np.sort(a) #对每行的数据进行排序 array([[1, 3, 6, 7, 9], [1, 2, 3,5, 8], [0, 4, 8, 9, 9], [0, 1, 5, 7, 9]]) >>> np.sort(a, axis=0) #对每列的数据进行排序 array([[5,1,1, 4, 0], [7, 1, 3, 6, 0], [9, 5, 9, 7, 2], [9, 8, 9'8, 3]])
12
更改数组的形状与数组堆叠
沿不同轴将数组堆叠在一起:
>>> a2 = floor(10*random.random((2,2))) >>> a2 array([[ 1., 1.], [ 5., 8.]]) >>> b2 = floor(10*random.random((2,2))) >>> b2 array([[ 3., 3.], [ 6., 0.]]) >>> vstack((a2,b2)) array([[ 1., 1.], [ 5., 8.], [ 3., 3.], [ 6., 0.]]) >>> hstack((a2,b2)) array([[ 1., 1., 3., 3.], [ 5., 8., 6., 0.]]) #对那些维度比二维更高的数组,hstack沿着第二个轴组合,vstack沿着第 一个轴组合,concatenate允许可选参数给出组合时沿着的轴。
>>>a= np.array([1.0, 0, -2, 1])
19
多项式函数
可以用poly1d()将系数转换为poly1d(一 元多项式)对象,此对象可以像函数一样调用, 它返回多项式函数的值:
>>> p = np.poly1d(a) >>>type(p) < numpy.lib.polynomial.poly1d>
4
求和、平均值、方差
如果指定axis参数,求和运算将沿着指定 的轴进行。在上面的例子中,数组a的第0轴长 度为4,第1轴长度为5。如果axis参数为1,就 对每行上的5个数求和,所得的结果是长度为 4 的一维数组。如果参数axis为0,就对每列上的4 个数求和,结果是长度为5的一维数组。 即, 结果数组的形状是原始数组的形状除去其第 axis个元素:
由于多项式的除法不一定能正好整除, 因此它返回除法所得到的商式和余式。上 面的例子中,商式为x2 -x - 1,余式为2。 因此将商式和被除式相乘后,再加上余式 就等于原来的P:
>>> p==np.poly1d([ 1., -1., -1.]) * [1,1] + 2 >>> True
22
多项式函数
8
求和、平均值、方差
mean()用于求数组的平均值,也可以通 过axis参数指定求平均值的轴,通过out参数指 定输出数组。和sum()不同的是,对于整数数 组,它使用双精度浮点数进行计算,而对于其 他类型的数组,则使用和数组元素类型相同的 累加变量进行计算:
>>>np.mean(a,axis=1) #整数数组使用双精度浮点数进行计算 array([ 5.2,3.8,6. , 4.4]) >>> np.mean(b) #单精度浮点数使用单精度浮点数进行计算 1.1109205 >>> np.mean(b, dtype=np.double) #用双稍度浮点数计算平 均值 1.1000000238418579