python numpy--专用函数

一、排序函数

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

import numpy as np
# 准备一个矩阵
a = np.mat('3 1 2; 0 5 4; 7 3 6')
a 
matrix([[3, 1, 2],
        [0, 5, 4],
        [7, 3, 6]])
np.sort(a) #使用函数进行排序
matrix([[1, 2, 3],
        [0, 4, 5],
        [3, 6, 7]])

以下加入axis:

np.sort(a,axis=1) #横着排序
matrix([[1, 2, 3],
        [0, 4, 5],
        [3, 6, 7]])
np.sort(a,axis=0) #列排序
matrix([[0, 1, 2],
        [3, 3, 4],
        [7, 5, 6]])

2.argsort函数——返回输入数组排序后的下标;

# argsort()
print(a)
np.argsort(a)
[[3 1 2]
 [0 5 4]
 [7 3 6]]


matrix([[1, 2, 0],
        [0, 2, 1],
        [1, 2, 0]], dtype=int64)
print(a)
np.argsort(a,axis = 0) #竖着排,默认的时axis=0(横着排)
[[3 1 2]
 [0 5 4]
 [7 3 6]]

matrix([[1, 0, 0],
        [0, 2, 1],
        [2, 1, 2]], dtype=int64)

二、搜索函数

在这里插入图片描述

1. np.argmax函数——返回数组中最大值对应的下标 ,忽略NAN

arr1 = np.array([1 ,8 ,6 ,np.nan ,20 ,0])
arr1
array([ 1.,  8.,  6., nan, 20.,  0.])
np.argmax(arr1)
3

看看多维的数组是什么情况捏~~~

f = np.mat('2 3 4;4 3 4 ;3 4 5;80,7,90')
print(np.argmax(f))
11

2.np.nanargmax函数——返回数组中最大值对应的下标 ,不忽略NAN

arr1
array([ 1.,  8.,  6., nan, 20.,  0.])
np.nanargmax(arr1)
4

3. argwhere( ) 返回符合条件的下标

arr1
array([ 1.,  8.,  6., nan, 20.,  0.])
np.where(arr1<8)
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in less
  """Entry point for launching an IPython kernel.


(array([0, 2, 5], dtype=int64),)
arr1<8
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in less
  """Entry point for launching an IPython kernel.


array([ True, False,  True, False, False,  True])
np.argwhere(arr1<8)
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in less
  """Entry point for launching an IPython kernel.

array([[0],
       [2],
       [5]], dtype=int64)

4. searchsorted( ) 为指定的插入值寻找 维持 排序 的 索引位置。 使用二分法

注: 如果输入的 数组 不是 range() 之类,没有排序的,一定要先排序

a = np.array([0,1,70,3,4,80,90])
a.sort()
a
array([ 0,  1,  3,  4, 70, 80, 90])
index = np.searchsorted(a,60)
index
4

在不打乱 a 排序的基础上插入b .返回b 每个数如果插入的话对应的位置

b = np.array([-5,7])
b
array([-5,  7])
indices = np.searchsorted(a,b)
indices
array([0, 4], dtype=int64)

三、数组元素的抽取

1、extract函数——根据某个条件从数组中抽取元素

arr = np.array(np.arange(8))
arr
array([0, 1, 2, 3, 4, 5, 6, 7])
list2 = [x for x in range(20) if x%2==0]
list2
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
condition = (arr%2==0)
condition
array([ True, False,  True, False,  True, False,  True, False])
arr1 = np.extract(condition,arr)
arr1
array([0, 2, 4, 6])
arr[arr%2==0]
array([0, 2, 4, 6])
arr2 = np.random.randint(0,50,20)
print(arr2)
np.extract((arr2%2==0),arr2)
[18 47 38 11 17 17  8 39 37  9  2 25 31 28 38 48 10 22 22 25]

array([18, 38,  8,  2, 28, 38, 48, 10, 22, 22])

3种读取条件的方式

import numpy as np

g = np.arange(20)
print('where:',np.where(g>10))
print('extract:',np.extract(g>10,g))
print('直接读取:',g[g>10])

在这里插入图片描述

2. np.nonzero( ) 专门用来抽取非零元素

np.nonzero(np.arange(5))
(array([1, 2, 3, 4], dtype=int64),)

四、金融函数

1. np.fv函数

计算所谓的终值(future value),终值是基于一些假设给出的某个金融 资产在未来某一时间点的价值。
终值有以下4个参数决定——利率、期数、每期支付金额以及现值
语法格式如下: numpy.fv(rate, nper, pmt, pv[, when='end’])
#参数:
rate:每一期的利率(rate of interest)。
nper:期数。
pmt:payment。每期支付金额
pv:present value,现值。
when:{{‘begin’, 1}, {‘end’, 0}}, {string, int}, optional. 每一期的开头还是结尾付

举例:某用户去银行存款,假设年利率3%、每季度续存金额10元、存5年以及存款1000,则计算5年后可领取多少金额。

np.fv(0.03/4,4*5,-10,-1000)   #  从身上给出去,所以是“-”号
1376.0963320407982

2.pv函数

计算现值(present value)是指资产在当前时刻的价值。 现值有以下4个参数决定——利率、期数、每期支付金额以及终值
语法格式如下: numpy.fv(rate, nper, pmt, fv[, when='end’])
参数:
rate:每一期的利率(rate of interest)。
nper:期数。
pmt:payment。每期支付金额
fv: future value,终值。
when:{{‘begin’, 1}, {‘end’, 0}}, {string, int}, optional. 每一期的开头还是结尾付

举例:某用户去银行存款,假设年利率3%、每季度续存金额10元、存5年后可领1376.0963320,则计算5年前存取的本金是多少金额。

扫描二维码关注公众号,回复: 3628543 查看本文章
np.pv(0.03/4,4*5,-10,1376.0963320407982)
-1000.0

3.np.npv(rate,values)函数 净现值

定义为按折现率计算的净现金流之和。
净现值是指投资方案所产生的【现金净流量】(流入-流出)以资金成本为贴现率折现之后与原始投资额现值的差额
经济意义
NPV>0表示项目实施后,除保证可实现预定的收益率外,尚可获得更高的收益。
NPV<0表示项目实施后,未能达到预定的收益率水平,而不能确定项目已亏损。
NPV=0表示项目实施后的投资收益率正好达到预期,而不是投资项目盈亏平衡
语法格式如下: numpy.npv(rate, values)
参数:
rate:折现率。
values: 现金流,正数代表‘收入’或‘取款’,负数代表‘投资’或‘存款’。 第一个值
必须是初始的投资,也就是必须是负数

举例:投资100,支出39、59、55、20。折现率为28.1%,则净现值为:

np.npv(0.281,[-100,39,59,55,20])
-0.00847859163845488

4.pmt函数–根据本金和利率计算每期需支付的金额

语法格式如下: numpy.pmt(rate, nper, pv[, fv=0, when='end’])
参数:
rate:每一期的利率(rate of interest)
nper:期数
pv:present value,现值

举例:某同学房贷20万,准备15年还清,年利率为7.5%,则每
月需还贷多少金额?

np.pmt(0.075/12,12*15,200000)
-1854.0247200054619

5.nper()函数,计算定期付款的期数

语法格式如下: numpy.nper(rate, pmt, pv, fv=0, when=‘end’)
参数:
rate:每一期的利率(rate of interest)
pmt:每期支付的金额
pv:present value,现值
fv: 终值

举例:某同学房贷20万,年利率为7.5%,每月能还贷2000,则
需要还多少期?

np.nper(0.075/12,-2000,200000) #得到的是月份
array(157.42258585)
np.nper(0.075/12,-2000,200000)/12 #得到的是年份
13.118548820826762

6.利率 rate()

语法格式如下: numpy.rate(nper, pmt, pv, fv)
参数:
nper :需还的期数
pmt:每期支付的金额
pv:present value,现值
fv: 终值

举例:某同学房贷20万,需还14年,每月能还贷2000,则年利
率为多少?

np.rate(12*14,-2000,200000,0) #这个是月利率
0.006793800917143923
np.rate(12*14,-2000,200000,0)*12 #这是年利率
0.08152561100572708

【小练习】小明房贷70万,年利率4%,准备还20年,
则每月月供多少?

np.pmt(0.04/12,12*20,700000)
-4241.862305095867
-np.pmt(0.04/12,12*20,700000)*12*20-700000 # 多还这么多
318046.95322300796

猜你喜欢

转载自blog.csdn.net/qq_43287650/article/details/82875055
今日推荐