Python代码练习(五):Numpy

Python代码练习(五):Numpy

七月在线课程的练习题

  • 简单加法: 在 Python 下对一个二维列表,l1=[[1,2,3],[4,5,6]],然后进行每个元素+1 的操作。 要求使用
    Python循环
    二维列表索引遍历二维列表:
    for i in range(len(l1)):
    for j in range(len(l1[i])):

    二维列表句柄遍历二维列表
    for i in l1:
    for j in i:

    Map函数
    Numpy计算(广播算法)
l1=[[1,2,3],[4,5,6]]

# Python循环--二维列表索引遍历二维列表
for i in range(len(l1)):
    for j in range(len(l1[i])):
        l1[i][j]+=1
print(l1)
# Map函数
l1=[[1,2,3],[4,5,6]]
def add1(*l1):
    for i in range(len(l1)):
        for j in range(len(l1[i])):
            l1[i][j]+=1
    return l1
list(map(add1,l1))
# Numpy计算(广播算法)
l1=[[1,2,3],[4,5,6]]
np.array(l1)+1

  • 矩阵转置:
    对 arr= [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]进行行列互转
    Python列表表达式list(zip(*arr))
    Numpy进行转置a.T
import numpy as np

arr= [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]
# Python列表表达式
list(zip(*arr))
#[list(row) for row in zip(*arr)]
# Numpy进行转置
arr1=np.array(arr)
arr1.T
  • 矩阵内部运算
    在Python下对一个二维列表,l1=[[1,2,3],[4,5,6]],要求求出按行与按列求和。 二维列表句柄遍历二维列表
    在numpy下对一个二维列表,l1=[[1,2,3],[4,5,6]],要求求出按行与按列求和。np.sum(arr,axis=1)

l1=[[1,2,3],[4,5,6]]
#python
# 二维列表句柄遍历二维列表
for i in l1:
    sum1=0
    for j in i:
        sum1+=j
    print("行的和",sum1)
l2=[list(row) for row in zip(*arr)]
for i in l2:
    sum2=0
    for j in i:
         sum2+=j
    print("列的和",sum2)    
    
#numpy
arr=np.array(l1)
print("行的和",list(np.sum(arr,axis=1)))#行
print("列的和",list(np.sum(arr,axis=0)))#列
  • NDArray 创建与属性
    使用Numpy创建一个多维数组,请输出以下属性
    该数组的形状np.shape(l)
    该数组的维度np.ndim(l)
    该数组元素的个数np.size(l)
    该数组的数据类型l.dtype
import numpy as np
l=[[1,2,3],[4,5,6]]
l=np.array(l)
l
print("形状:",np.shape(l),"维度",np.ndim(l),"元素的个数",np.size(l),"数据类型",l.dtype)

  • NDArray 的访问
    创建一个包含从数字 1 到 60,的数组,并将于其形状变为为(3,2,10)的三维数组,并按如下要求访问这个三维数组
    访问第0维度中第二个元素的所有的信息l[0,1,:]索引和切片同时
    访问第0维度中所有元素的全部第0个维度(行),和最后一个维度(列)6-7列
    将该数组降维至二维,形状自行定义
    打乱矩阵内元素的顺序np.random.shuffle(l)
    按行维度进行排序np.sort(l,axis=1)
    按列维度进行排序
    将降维后的数组进行行列转置
    将转至后的数组展平至一维数组。l.flatten()
import numpy as np

l=np.arange(60).reshape(3,2,10)
print(l)
print("第0维度中第二个元素的所有的信息:",l[0,1,:])
print("第0维度中所有元素的全部第0个维度(行),\
和最后一个维度(列)6-7列",l[0,0,[5,6]])


l=l.reshape(4,15)
print(l)
print("打乱矩阵内元素的顺序",np.random.shuffle(l))
print("按行维度进行排序\n",np.sort(l,axis=1))
print("按列维度进行排序\n",np.sort(l,axis=0))
print("行列转置\n",l.T)
print("将转至后的数组展平至一维数组\n",l.flatten())

  • 拼接与切分 NDArray 对象
    先建立两个矩阵arr1=[[1,2,3],[4,5,6]]和arr2=[[7,8,9],[10,11,12]]
    对两个矩阵进行横向拼接,并输出结果
    对两个矩阵进行纵向拼接,赋值给arr3并输出结果
    对arr3按列进行分割为3个新元素并输出
    对arr3按行进行分割为2个新元素并输出
    将arr3转换为Python列表,并指定数据类型为int
arr1=[[1,2,3],[4,5,6]]
arr2=[[7,8,9],[10,11,12]]
np.hstack([arr1,arr2])
arr3=np.vstack([arr1,arr2])
print("按列进行分割为3个新元素",np.hsplit(arr3,3))
print("按行进行分割为2个新元素",np.vsplit(arr3,2))
print("arr3转换为Python列表",list(arr3))
  • 数据导入导出
    生成一个随机数矩阵,形状为(3,5)
    将其第2行第4列的元素修改为998
    保存至本地文件random_matrix.txt
    并尝试从这个文件中载入并验证修改是否正确
import numpy as np
arr=np.random.rand(15).reshape(3,5)
print(arr)
# print(arr[1,3])
arr[1,3]=998
np.savetxt('random_matrix.txt',arr)
np.loadtxt('random_matrix.txt')
  • 使用 numpy 实现 softmax
    思路:
    计算指数,并安全处理避免数字过大
    按行求和
    每行均除以计算的和

  • 股票相关统计量计算
     读入的给定的ibm股价数据中的收盘价及成交量
     计算成交量加权平均价VWAP(收盘价)
     计算时间加权平均价TWAP(收盘价)
     找出IBM股票收盘价的极差
     计算其收盘价的中位数,均值及方差
    计算股票的收益率(简单收益率与对数收益率)
    计算对数收益收益率大于1%的天数有多少?

成交量加权平均价是将多笔交易的价格按各自的成交量加权而算出的平均价,若是计算某一证券在某交易日的 VWAP,将当日成交总值除以总成交量即可。VWAP 可作为交易定价的一种方法,亦可作为衡量机构投资者或交易商 的交易表现的尺度。英文 Volume Weighted Average Price 。
假设某种商品最高价和最低价 2 种,其中最高价 300,占 10%;最低价 200,占 90%。
那该商品的加权平均价为:
a1 对应的是价格,a2 对应的是成交量
时间加权平均也是同样原理,按照越近的日期,所占的权重越高这样的方式去计算。
#普通收益率,注意:不含最后一个交易日的计算
numpy 中的 diff 函数用于行一行之间的求差运算。
对数收益率,取对数可以让数据更平稳,但是不会改变数据间的相关关系。有利于计算。 logreturn=np.diff(np.log©)
计算对数收益大于 1 的交易日 logreturn[logreturn*100>1].size
日期处理
导入文本文件中的股份数据,并将日期转为化对应周几后,再分别去计算从周一到周五的平均价,并找出周几平均 价最高,周几的平均价去低?
数据:ibm 股票数据
提示:自定义日期处理函数,在 loadtxt 的参数中对应处理函数与列。
按周对股票价格进行汇总:
在上一题的基础上选取有连续交易的三周时间(共计 15 天)后,按周进行汇总要求得出每周的开,高,低,收。 提示:numpy 中的 apply_along_axis 函数是高阶函数,能接收处理函数。
c=c[:-1]#对价格顺序进行反转,最新交易日放到最后
numpy.apply_along_axis(func, axis, arr, *args, **kwargs):
必选参数:func,axis,arr。
其中 func 是我们自定义的一个函数,函数 func(arr)中的 arr 是一个数组,函数的主要功能就是对数组里的每 一个元素进行处理,其中 axis 表示函数 func 对数组 arr 作用的轴。可选参数:*args, **kwargs。都是 func()函数额外的参数。返回的是一个根据 func()函数以及维度 axis 运算后得到的的数组.

你可能感兴趣的:(Python学习笔记,python)