1 # coding: utf-8 2 # 线性代数 3 4 # numpy的线性代数中* 是矩阵的逐元素乘积,不是矩阵的点乘积 5 import numpy as np 6 x = np.array([[1., 2., 3.], [4., 5., 6.]]) 7 y = np.array([[6., 23], [-1, 7], [8, 9]]) 8 x.dot(y) 9 10 # 一个二维数组和一个长度合适的一维数组之间的矩阵乘积,其结果是一个一维数组 11 np.dot(x, np.ones(3)) 12 13 # 特殊符号@ 作为中缀操作符,用于点乘积矩阵操作 14 x @ np.ones(3) 15 16 # 矩阵分解的标准函数集 np.linalg 17 from numpy.linalg import inv, qr 18 X = np.random.randn(5, 5) 19 mat = X.T.dot(X) #X.T.dot(X)是计算X和它的转置矩阵X.T的点乘积。 20 inv(mat) 21 mat.dot(inv(mat)) 22 q, r = qr(mat) 23 r 24 25 # 伪随机数生成 26 # 生成正态分布样本数组 27 samples = np.random.normal(size=(4, 4)) 28 samples 29 30 #示例:随机漫步 31 32 import matplotlib.pyplot as plt 33 import random 34 position = 0 35 walk = [position] 36 steps = 1000 37 for i in range(steps): 38 step = 1 if random.randint(0, 1) else -1 39 position += step 40 walk.append(position) 41 42 plt.plot(walk[:100]) 43 44 # 一次性模拟多次随机漫步 45 nwalks = 5000 46 nsteps = 1000 47 draws = np.random.randint(0, 2, size=(nwalks, nsteps)) 48 steps = np.where(draws > 0, 1, -1) 49 walks = steps.cumsum(1) 50 walks 51 52 #计算随机漫步最大值最小值 53 walks.max() 54 walks.min() 55 56 # 在这些随机漫步中计算出30或-30的最小穿越时间 57 hist30 = (np.abs(walks) >= 30).any(1) 58 hist30 59 hist30.sum() 60 61 # 使用布尔值数组来选出绝对步数超过30的步所在的行,并使用argmax从轴向1上获取穿越时间 62 crossing_times = (np.abs(walks[hist30]) >= 30).argmax(1) 63 crossing_times.mean()
参考书籍:利用 python 进行数据分析
作者:舟华520
出处:https://www.cnblogs.com/xfzh193/
本文以学习,分享,研究交流为主,欢迎转载,请标明作者出处!