设为首页 加入收藏

TOP

Python基础之数组和向量化计算总结(一)
2019-04-01 00:08:53 】 浏览:97
Tags:Python 基础 量化 计算 总结

一、多维数组


1、生成ndarray    (array函数) 


.np.array()生成多维数组


例如:import numpy as np
data1=[6,7.5,8,0,1]    #创建简单的列表
print(data1)
arr1=np.array(data1)    #将列表创建数组
print(arr1)


2、ndarry的数据类型


(1)dtype()  #获取数组元素类型(浮点数、复数、整数等)


data=np.random.randn(2,3)  #生成随机数组
print(data)
print(data.shape)    #返回数组的形状
print(data.dtype) 


(2)转化数组的数据类型:astype()  astype生成一个新的数组


import numpy as np


a=np.array([0.11,2.2,3])


print(a)


b=a.astype(np.int)


3、numpy数组算术


(1)逐元素操作


arr=np.array([[1.,2.,3.],[4.,5.,6.]])


print(arr)


print(arr*arr)


4、索引与切片


(1)基础索引与切片


arr=np.arange(10)
print(arr)
print(arr[5:8])
arr[5:8]=12
print(arr)


(2)布尔索引


names=np.array(["Bob","Joe","Will","Bob","Will","Joe","Joe",])


print(names=="Bob")  #结果:[ True False False  True False False False]


5、数组转置与换轴


(1)arr.T    #数组转置


补充:简单的一维和二维数组的转置就是线性代数中的行列相互交换。而对于高维数组的转置:


import numpy as np


a = np.arange(12).reshape(2, 2, 3) 


#创建一个三维矩阵,由2个2*3的矩阵块组成


print(a)    #结果为:


[[[ 0  1  2]      #运行结果:其中每个元素都有其唯一的坐标(x,y,z)例如:0的标为(0,0,0),1的坐标为:(0,1,0)........11的坐标为(1,1,2)


  [ 3  4  5]]


  [[ 6  7  8]


  [ 9 10 11]]]


Print(a.T)  #Output为:数

楸湮3个2*2的矩阵了。而各元素的坐标变为:0:(0,0,0),1:(1,0,0),........11:(2,1,1)每个元素坐标的,其实该T操作等同于后面两种方法a.transpose(2,1,0)中x轴和z轴的交换以及a.swapaxes(0,2)


[[[ 0  6]


  [ 3  9]]


 [[ 1  7]


  [ 4 10]]


 [[ 2  8]


  [ 5 11]]]


 (2)内积:np.dot()    x.dot()等价于np.dot(x,y)


arr=np.random.randn(6,3)
print(arr)
print(arr.T)
print(np.dot(arr.T,arr))


(3)换轴:transpose()


对于高维数组,transpose()方法的参数需要得到一个由轴编号(轴编号自0开始)序列构成的元组才能对轴进行转置,只需要调换轴对应数字参数的顺序就可以将数组进行轴的变换。


arr=np.arrange(16).reshape((2,2,6))


arr.transpose((1,0,2))          #将第二个轴和第一个轴变换位置


运行结果为:[[[ 0  1  2  3]


[ 8  9 10 11]]


[[ 4  5  6  7]


              [12 13 14 15]]]


Swapaxes方法,直接进行轴的交换


二、函数


1、一元通用函数


(1)平方根  sqrt()


arr=np.arange(10)
print(arr)
print(np.sqrt(arr))


(2)自然指数值  exp()


print(np.exp(arr))   


(3)返回数组的小数部分和整数部分  modf()


arr=np.random.randn(7)*5
print(arr)
remainder,whole_part=np.modf(arr)
print(remainder)
print(whole_part)


2、二元通用函数


(1)最大值  maximum()


x=np.random.randn(8)
print(x)
y=np.random.randn(8)
print(y)
print(np.maximum(x,y))


3、矩阵分解的标准函数集                  ???


(1)、numpy.linalg()


(1.1)、方阵的逆矩阵  inv()


(1.2)、QR分解  qr()


from numpy.linalg import inv,qr
x=np.random.randn(5,5)
print(x)
mat=x.T.dot(x) #内积
print(inv(mat))  #求逆
q,r=qr(mat)
print(r)


4、随机数生成器


numpy.random()


注意:产生随机数random.randn()和random.rand(n)的区别random.randn(n)是从标准正态分布中返回一个或者多个样本值,random.rand(n,m)表示由位于(0,1)中的随机数填充的n*m的矩阵。


三、数组编程


1、将条件逻辑作为数组操作  where()


xarr=np.array([1.1,1.2,1.3,1.4,1.5])
yarr=np.array([2.1,2.2,2.3,2.4,2.5])
cond=np.array([True,False,True,True,False])      #是否是x的值
result=np.where(cond,xarr,yarr)
print(result)              #result([1.1,2.2,1.3,1.4,2.5])


2、数学和统计方法  mean()平均值、sum()求和、cumsum()#从0元素来累计和、cumprod()  # 从1元素来累
编程开发网

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python中使用type、metaclass动态.. 下一篇Python科学计算学习之高级数组

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }