《Python数据分析基础教程:Numpy学习指南》- 速记 – 第七章

  • Post author:
  • Post category:python


7.1 排序

NumPy提供了多种排序函数,如下所示:

 sort函数返回排序后的数组;

 lexsort函数根据键值的字典序进行排序;

 argsort函数返回输入数组排序后的下标;

 ndarray类的sort方法可对数组进行原地排序;

 msort函数沿着第一个轴排序;

 sort_complex函数对复数按照先实部后虚部的顺序进行排序。

7.2 按字典序排序

lexsort函数返回输入数组按字典序排序后的下标

Sort names: first by surname, then by name.

>>> surnames =    ('Hertz',    'Galilei', 'Hertz')
>>> first_names = ('Heinrich', 'Galileo', 'Gustav')
>>> ind = np.lexsort((first_names, surnames))
>>> ind
array([1, 2, 0])
>>>
>>> [surnames[i] + ", " + first_names[i] for i in ind]
['Galilei, Galileo', 'Hertz, Gustav', 'Hertz, Heinrich']

Sort two columns of numbers:

>>> a = [1,5,1,4,3,4,4] # First column
>>> b = [9,4,0,4,0,2,1] # Second column
>>> ind = np.lexsort((b,a)) # Sort by a, then by b
>>> print ind
[2 0 4 6 5 3 1]
>>>
>>> [(a[i],b[i]) for i in ind]
[(1, 0), (1, 9), (3, 0), (4, 1), (4, 2), (4, 4), (5, 4)]

7.4 对复数进行排序(略)

7.5 搜索

 argmax函数返回数组中最大值对应的下标。

>>> a = np.array([2, 4, 8])
>>> np.argmax(a)
2

 nanargmax函数提供相同的功能,但忽略NaN值。

>>> b = np.array([np.nan, 2, 4])
>>> np.nanargmax(b)
2

 argmin和nanargmin函数的功能类似,只不过换成了最小值。

 argwhere函数根据条件搜索非零的元素,并分组返回对应的下标。

>>> a = np.array([2, 4, 8])
>>> np.argwhere(a <= 4)
array([[0],[1]])

 searchsorted函数可以为指定的插入值寻找维持数组排序的索引位置。该函数使用二分搜索算法,计算复杂度为O(log(n))。

 extract函数返回满足指定条件的数组元素。

7.6 使用searchsorted 函数

searchsorted函数为7和-2返回了索引5和0。用这些索引作为插入位置,生成数组[-2, 0, 1, 2, 3, 4, 7],这样就维持了数组的排序

import numpy as np
a = np.arange(5)
indices = np.searchsorted(a, [-2, 7])  #索引可以维持数组排序的插入位置
print "Indices", indices
#output
Indices [0 5]

print "The full array", np.insert(a, indices, [-2, 7])
#output
The full array [-2 0 1 2 3 4 7]

7.8 从数组中抽取元素

从一个数组中抽取偶数元素。

import numpy as np
a = np.arange(7)
condition = (a % 2) == 0 #生成选择偶数元素的条件变量
print "Even numbers", np.extract(condition, a)
print "Non zero", np.nonzero(a)

使用nonzero函数抽取数组中的非零元素

np.nonzero(a)

7.9 金融函数

 fv函数计算所谓的终值(future value),即基于一些假设给出的某个金融资产在未来某一时间点的价值。

 pv函数计算现值(present value),即金融资产当前的价值。

 npv函数返回的是净现值(net present value),即按折现率计算的净现金流之和。

 pmt函数根据本金和利率计算每期需支付的金额。

 irr函数计算内部收益率(internal rate of return)。内部收益率是是净现值为0时的有效利率,不考虑通胀因素。

 mirr函数计算修正后内部收益率(modified internal rate of return),是内部收益率的改进版本。

 nper函数计算定期付款的期数。

 rate函数计算利率(rate of interest)。

7.10 计算终值

终值是基于一些假设给出的某个金融资产在未来某一时间点的价值。终值决定于4个参数——利率、期数、每期支付金额以及现值。在本节的教程中,我们以利率3%、每季度支付金额10、存款周期5年以及现值1 000为参数计算终值。

使用正确的参数调用fv函数,计算终值:

print "Future value", np.fv(0.03/4, 5 * 4, -10, -1000)
#output
Future value 1376.09633204

7.12 计算现值(略)

7.14 计算净现值(略)

7.16 计算内部收益率(略)

7.18 计算分期付款

pmt函数可以根据利率和期数计算贷款每期所需支付的资金。

假设贷款100万,年利率为10%,要用30年时间还完贷款,那么每月必须支付多少资金呢?使用刚才提到的参数值,调用pmt函数。

print "Payment", np.pmt(0.10/12, 12 * 30, 1000000)
#output
Payment -8775.71570089

7.20 计算付款期数

NumPy中的nper函数可以计算分期付款所需的期数。所需的参数为贷款利率、固定的月供以及贷款额。

考虑贷款9000,年利率10%,每月固定还款为100的情形。

通过nper函数计算出付款期数。

print "Number of payments", np.nper(0.10/12, -100, 9000)
#output
Number of payments 167.047511801 #需要167个月

7.22 计算利率

rate函数根据给定的付款期数、每期付款资金、现值和终值计算利率。

使用7.20节中的数值进行逆向计算,由其他参数得出利率。

填入之前教程中的数值作为参数。

print "Interest rate", 12 * np.rate(167, -100, 9000, 0)
#计算出的利率约为10%。
Interest rate 0.0999756420664

7.23 窗函数

窗函数(window function)是信号处理领域常用的数学函数,相关应用包括谱分析和滤波器设计等。这些窗函数除在给定区间之外取值均为0。NumPy中有很多窗函数,如bartlett、blackman、hamming、hanning和kaiser。

7.24 绘制巴特利特窗

巴特利特窗(Bartlett window)是一种三角形平滑窗。

window = np.bartlett(42)
plot(window)
show()

7.25 布莱克曼窗

布莱克曼窗(Blackman window)形式上为三项余弦值的加和。blackman函数返回布莱克曼窗。该函数唯一的参数为输出点的数量。如果数量为0或小于0,则返回一个空数组。

7.26 使用布莱克曼窗平滑股价数据(略)

7.27 汉明窗

汉明窗(Hamming window)形式上是一个加权的余弦函数。NumPy中的hamming函数返回汉明窗。该函数唯一的参数为输出点的数量。如果数量为0或小于0,则返回一个空数组。

7.28 绘制汉明窗

window = np.hamming(42)
plot(window)
show()

7.29 凯泽窗

凯泽窗(Kaiser window)是以贝塞尔函数(Bessel function)定义的,该函数的第一个数为输出点的数量。如果数量为0或小于0,则返回一个空数组。第二个参数为β值。

window = np.kaiser(42, 14)
plot(window)
show()

7.31 专用数学函数(略)

7.32 绘制修正的贝塞尔函数(略)

7.34 绘制sinc 函数(略)



版权声明:本文为silentwater原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。