找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 579|回复: 0

Numpy学习笔记 下

3

主题

3

帖子

3

积分

贫民

积分
3
mushroomqiu 发表于 2017-1-10 16:01:18 | 显示全部楼层 |阅读模式
  1. #Bool数组的方法
  2. 2
  3. arr4 = np.random.randn(100)
  4. 3
  5. print "arr4里面大于0的数字的个数:",(arr4>0).sum()
  6. 4
  7. bools = np.array([True,False,True,False])
  8. 5
  9. print "Bools数组中是否有非零值:",bools.any()
  10. 6
  11. print "Bools数组中是否全是非零值:",bools.all()
  12. 7
  13. #any()和all()还可以用于非Bool数组,用来检测array里面是不是有0元素
复制代码
  1. #一维数组排序
  2. arr5 = np.random.randn(5)
  3. print arr5
  4. arr5.sort()
  5. print arr5
  6. #多位数字按轴排序
  7. print "如果sort()里面传入的参数为1,说明是按照大小顺序把每一行排列,如果里面传入的参数为0说明把每一列按照大小顺序排列"
  8. print
  9. arr6 = np.random.randn(4,4)
  10. print "排序前:"
  11. print arr6
  12. arr6.sort(1)
  13. print "按行排序后:"
  14. print arr6
  15. print
  16. print "应用:计算一个array的分位数"
  17. large_arr = np.random.randn(10000)
  18. large_arr.sort()
  19. print
  20. print "计算一个1000个正态随机数的5%分位数,其中int函数表示取整"
  21. print "large_arr[int(0.05*len(large_arr))]"
  22. large_arr[int(0.05*len(large_arr))]
复制代码
  1. #还有一些其余的逻辑运算不再举例
  2. #unique() 计算x中的唯一元素,返回一个有序的结果
  3. #intersect1d(x,y) 计算xy中的公共元素,相当于取交集
  4. #union(x,y) 计算xy的并集
  5. #in1d(x,y) 表示在x的元素是否也在y中,返回Bool数组
  6. #setdiff1d(x,y) 计算集合的差 相当于在x中且不在y中
  7. #setxor1d(x,y) 集合的对称差 存在于其中某集合中但不同时存在于两个集合中
复制代码
  1. #Numpy文件的存取也是以array为基础
  2. #函数分别是np.save('path',array_name) path是保存的路径,name是要储存的array的名字
  3. #数组的读取用np.load("path")
  4. #np.savez可以将多个数组保存到一个压缩文件里,加载时候会变成一个dict对象,对dict切片得到array
复制代码
  1. #Numpy在线性代数中的应用
  2. x = np.array([[1,2,3],[4,5,6]])
  3. y = np.array([[6,23],[-1,7],[8,9]])
  4. print np.dot(x,y)#x.dot(y)
  5. print
  6. print np.dot(x,np.ones(3))
  7. from numpy import linalg#用于线性代数的pack
  8. X = np.random.randn(5,5)
  9. print "X的内积:"
  10. print X.T.dot(X)
  11. print "x的内积的逆:"
  12. print linalg.inv(X.T.dot(X))
  13. print "矩阵的QR分解:"
  14. q,r = linalg.qr(X.T.dot(X))
  15. print "Q:"
  16. print q
  17. print "R:"
  18. print r
  19. #linalg里面还有很多很强大的线性代数的函数
  20. #dot表示矩阵乘法,语法为x.dot(y)或者dot(x,y)这里的xy是要注意顺序的
  21. #trace计算矩阵的迹 det为计算行列式
  22. #eig表示计算矩阵的特征值和特征向量,这是个返回两个参数的函数,第一个是特征值第二个是特征向量,要注意这里的输入必须是方阵
  23. #svd表示计算矩阵的奇异值分解
  24. #solve表示求解Ax=b的线性方程组,其中A是一个方阵
  25. #lstsq表示求解Ax=b的最小二乘解,用于超定方程
复制代码
  1. #Numpy的随机数生成

  2. #生成一组4*4的标准正态分布的随机数
  3. samples = np.random.normal(size=(4,4))
  4. print samples

  5. #np.random里面部分函数的说明
  6. #seed生成随机数的种子
  7. #shuffle对一个序列进行随机排序
  8. #rand返回均匀分布的序列
  9. #randint指定上下限选取整数
  10. #randn标准正态分布
  11. #binomial/normal/beta/chisquare/gamma/uniform分别表示各自的分布下选取随机数
复制代码
  1. #随机数的应用:生成随机游走的序列
  2. nsteps = 1000
  3. draws = np.random.randint(0,2,size = nsteps)
  4. steps = np.where(draws>0,1,-1)
  5. walks = steps.cumsum()
  6. print walks.min()
  7. print walks.max()
  8. print (np.abs(walks) >= 10).argmax()#找出这个随机游走在10的时候的首达时

  9. #一次模拟多个随机游走
  10. nwalks = 5000
  11. nsteps = 1000
  12. draws = np.random.randint(0,2,size=(nwalks,nsteps))
  13. steps = np.where(draws>0,1,-1)
  14. walks = steps.cumsum(1)
  15. print walks
  16. #计算以上随机游走穿越30或者-30的最小时间,不是让这5000个都穿越,所以我们用any函数
  17. hits30 = (np.abs(walks)>=30).any(1)
  18. print "各个随机游走是否到达了距离原点30的位置:",hits30
  19. print "5000个随机游走里一共有几个到达了30:",hits30.sum()

  20. crossing_times = (np.abs(walks[hits30])>=30).argmax(1)
  21. print crossing_times.mean()

  22. #同时可以用其他的分布生成随机游走
  23. #例如steps = np.random.normal(loc=0,scale=0.25,size = (nsteps,nwalks))
复制代码
-11
2227[[  1   0   1 ..., -10 -11 -12] [ -1   0  -1 ..., -40 -39 -40] [  1   2   3 ...,  26  25  24] ...,  [ -1  -2  -1 ...,   4   5   6] [  1   0   1 ..., -16 -17 -16] [ -1  -2  -1 ...,  10  11  12]]
各个随机游走是否到达了距离原点30的位置: [False  True  True ..., False  True  True]5000个随机游走里一共有几个到达了30: 3428507.378646441

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表