gyshssl 发表于 2019-8-10 22:57:51

python与量化系列01-NumPy:数组计算

一、MumPy:数组计算1、NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础。
2、NumPy的主要功能:
[*]ndarray,一个多维数组结构,高效且节省空间
[*]无需循环对整组数据进行快速运算的数学函数
[*]*读写磁盘数据的工具以及用于操作内存映射文件的工具
[*]*线性代数、随机数生成和傅里叶变换功能
[*]*用于集成C、C++等代码的工具
3、安装方法:pip install numpy
4、引用方式:import numpy as np二、NumPy:ndarray-多维数组对象1、创建ndarray:np.array()2、ndarray是多维数组结构,与列表的区别是:
[*]数组对象内的元素类型必须相同
[*]数组大小不可修改
3、常用属性:
[*]T        数组的转置(对高维数组而言)
[*]https://images2017.cnblogs.com/blog/1184802/201801/1184802-20180129160830875-535936421.png
[*]dtype        数组元素的数据类型
[*]size        数组元素的个数
[*]ndim        数组的维数
[*]shape        数组的维度大小(以元组形式)
4、常用方法array.shape                         array的规格array.ndim      array.dtype                         array的数据规格numpy.zeros(dim1,dim2)            创建dim1*dim2的零矩阵numpy.arangenumpy.eye(n) /numpy.identity(n)   创建n*n单位矩阵numpy.array([…data…], dtype=float64 )array.astype(numpy.float64)         更换矩阵的数据形式array.astype(float)               更换矩阵的数据形式array * array                     矩阵点乘array                        切片array.copy()                        得到ndarray的副本,而不是视图array =array [ a, b ]      两者等价name=np.array(['bob','joe','will']) res=name==’bob’ res= array([ True, False, False], dtype=bool)data                索引,只索取为True的部分,去掉False部分通过布尔型索引选取数组中的数据,将总是创建数据的副本。data[ ]                   索引,将第4,3,0,6行摘取出来,组成新数组data[-1]=data__len__()-1]numpy.reshape(a,b)                  将a*b的一维数组排列为a*b的形式array(,)          返回一维数组,分别为,,,array[ ][:, ]=array[ numpy.ix_( , ) ]array.T                           array的转置numpy.random.randn(a,b)             生成a*b的随机数组numpy.dot(matrix_1,matrix_2)      矩阵乘法array.transpose( (1,0,2,etc.) )   对于高维数组,转置需要一个由轴编号组成的元组

三、NumPy:ndarray-数据类型
[*]ndarray数据类型:dtype:
[*]布尔型:bool_
[*]整型:int_ int8 int16 int32 int64
[*]无符号整型:uint8 uint16 uint32 uint64
[*]浮点型:float_ float16 float32 float64
[*]复数型:complex_ complex64 complex128
四、NumPy:ndarray-创建
创建ndarray:    array()         将列表转换为数组,可选择显式指定dtype    arange()      range的numpy版,支持浮点数    linspace()      类似arange(),第三个参数为数组长度    zeros()         根据指定形状和dtype创建全0数组    ones()          根据指定形状和dtype创建全1数组    empty()         根据指定形状和dtype创建空数组(随机值)    eye()         根据指定边长和dtype创建单位矩阵

五、NumPy:索引和切片
1、数组和标量之间的运算    a+1    a*3    1//a    a**0.52、同样大小数组之间的运算    a+b    a/b    a**b3、数组的索引:    一维数组:a    多维数组:      列表式写法:a      新式写法:a (推荐)   数组的切片:      一维数组:a    a      a = 1      多维数组:a    a[:,3:5]      a[:,1]4、强调:与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。    【解决方法:copy()】

六、NumPy:布尔型索引问题:给一个数组,选出数组中所有大于5的数。
  答案:a
  原理:
    a>5会对a中的每一个元素进行判断,返回一个布尔数组
    布尔型索引:将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组问题2:给一个数组,选出数组中所有大于5的偶数。
问题3:给一个数组,选出数组中所有大于5的数和偶数。
  答案:
     a[(a>5) & (a%2==0)]
     a[(a>5) | (a%2==0)]import numpy as npa = np.array()a#注意加括号,不叫括号错误,如下输出:array([ 1,2,3,4,5,4,7,8,9, 10])a[(a>5)&(a%2==0)]输出:array([ 8, 10])
七、NumPy:花式索引*问题1:对于一个数组,选出其第1,3,4,6,7个元素,组成新的二维数组。答案:a[]问题2:对一个二维数组,选出其第一列和第三列,组成新的二维数组。答案:a[:,]
八、NumPy:通用函数’通用函数:能同时对数组中所有元素进行运算的函数常见通用函数:一元函数:abs, sqrt, exp, log, ceil, floor, rint, trunc, modf, isnan, isinf, cos, sin, tan
numpy.sqrt(array)                   平方根函数   numpy.exp(array)                  e^array的数组numpy.abs/fabs(array)               计算绝对值numpy.square(array)               计算各元素的平方 等于array**2numpy.log/log10/log2(array)         计算各元素的各种对数numpy.sign(array)                   计算各元素正负号numpy.isnan(array)                  计算各元素是否为NaNnumpy.isinf(array)                  计算各元素是否为NaNnumpy.cos/cosh/sin/sinh/tan/tanh(array) 三角函数numpy.modf(array)                   将array中值得整数和小数分离,作两个数组返回numpy.ceil(array)                   向上取整,也就是取比这个数大的整数 numpy.floor(array)                  向下取整,也就是取比这个数小的整数numpy.rint(array)                   四舍五入numpy.trunc(array)                  向0取整 numpy.cos(array)                     正弦值numpy.sin(array)                  余弦值 numpy.tan(array)                  正切值

二元函数:add, substract, multiply, divide, power, mod,maximum, mininum,
numpy.add(array1,array2)            元素级加法numpy.subtract(array1,array2)       元素级减法numpy.multiply(array1,array2)       元素级乘法numpy.divide(array1,array2)         元素级除法 array1./array2numpy.power(array1,array2)          元素级指数 array1.^array2numpy.maximum/minimum(array1,aray2) 元素级最大值numpy.fmax/fmin(array1,array2)      元素级最大值,忽略NaNnumpy.mod(array1,array2)            元素级求模numpy.copysign(array1,array2)       将第二个数组中值得符号复制给第一个数组中值numpy.greater/greater_equal/less/less_equal/equal/not_equal (array1,array2)元素级比较运算,产生布尔数组numpy.logical_end/logical_or/logic_xor(array1,array2)元素级的真值逻辑运算

九、补充知识:浮点数特殊值1、浮点数:float
2、浮点数有两个特殊值:
[*]nan(Not a Number):不等于任何浮点数(nan != nan)
[*]inf(infinity):比任何浮点数都大
在数据分析中,nan常被表示为数据缺失值
2、NumPy中创建特殊值:np.nan        np.inf
3、在数据分析中,nan常被用作表示数据缺失值既然nan连自己都不相等,那么怎么判断是不是NAN呢?       
用a==a 只要返回False就能判断
https://images2017.cnblogs.com/blog/1184802/201801/1184802-20180129175143515-660299643.png十、NumPy:数学和统计方法常用函数:
[*]sum        求和
[*]cumsum 求前缀和
[*]mean        求平均数
[*]std        求标准差
[*]var        求方差
[*]min        求最小值
[*]max        求最大值
[*]argmin        求最小值索引
[*]argmax        求最大值索引
十一、NumPy:随机数生成随机数生成函数在np.random子包内
常用函数
[*]rand        给定形状产生随机数组(0到1之间的数)
[*]randint        给定形状产生随机整数
[*]choice        给定形状产生随机选择
[*]shuffle        与random.shuffle相同
[*]uniform        给定形状产生随机数组

页: [1]
查看完整版本: python与量化系列01-NumPy:数组计算