线性代数
常用的numpy.linalg函数
类型 | 说明 |
---|
diag | 以一维数组的形式返回方阵的对角线(或非对角线元素),获将一维数组转换 为方阵(非对角线元素为0)。 |
dot | 矩阵乘法 |
trace | 计算对角线元素的和 |
det | 计算矩阵行列式 |
eig | 计算方阵的特征值和特征向量 |
inv | 计算方阵的逆 |
| |
类型 | 说明 |
---|
pinv | 计算矩阵的Moore-Penrose伪逆 |
qr | 计算QR分解 |
svd | 计算奇异值分解 |
solve | 解线性方程Ax = b,其中A为一个方阵。 |
lstsq | 计算Ax = b的最小二乘解 |
# -*- coding: utf-8 -*-
# TODO: http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.qr.html q代表什么矩阵?
import numpy as np
import numpy.random as np_random
from numpy.linalg import inv, qr
print('矩阵乘法')
x = np.array([[1., 1., 1.], [1., 1., 1.]])
y = np.array([[1., 1.], [-1, 1], [1, 1]])
#.dot()即点乘,向量的内积。两个矩阵相乘Ax*n和Bn*y得到Cx*y。
print(x.dot(y))
#np.ones()单位矩阵
print(np.ones(3))
print(np.dot(x, np.ones(3)))
x = np_random.randint(2,size=(2, 2))
print(x)
print('矩阵求逆')
#矩阵必须为方阵,且行列式不为0
mat = x.T.dot(x)#生成一个方阵
matdet = np.linalg.det(mat)
print("行列式值为",matdet)
if 0.0 != matdet :
print(inv(mat))# 矩阵求逆,前提行列式不为0
print(mat.dot(inv(mat))) # 与逆矩阵相乘,得到单位矩阵。
print('矩阵消元QR分解')
#如果实(复)非奇异矩阵A能够化成正交(酉)矩阵Q与实(复)非奇异上三角矩阵R的乘积,即A=QR,则称其为A的QR分解。
print(mat)
q, r = qr(mat)
print(q)
pri
4000
nt(r)
矩阵乘法
[[ 1. 3.]
[ 1. 3.]]
[ 1. 1. 1.]
[ 3. 3.]
[[1 0]
[1 1]]
矩阵求逆
行列式值为 1.0
[[ 1. -1.]
[-1. 2.]]
[[ 1. 0.]
[ 0. 1.]]
矩阵消元QR分解
[[2 1]
[1 1]]
[[-0.89442719 -0.4472136 ]
[-0.4472136 0.89442719]]
[[-2.23606798 -1.34164079]
[ 0. 0.4472136 ]]
随机数生成
部分numpy.random函数 I
类型 | 说明 |
---|
seed | 确定随机数生成器的种子 |
permutation | 返回一个序列的随机排列或返回一个随机排列的返回 |
shuffle | 对一个序列就地随机乱序 |
rand | 产生均匀分布的样本值 |
randint | 从给定的上下限范围内随机选取整数 |
randn | 产生正态分布(平均值为0,标准差为1) |
binomial | 产生二项分布的样本值 |
部分numpy.random函数 II
类型 | 说明 |
---|
normal | 产生正态(高斯)分布的样本值 |
beta | 产生Beta分布的样本值 |
chisquare | 产生卡方分布的样本值 |
gamma | 产Gamma分布的样本值 |
uniform | 产生在[0, 1]中均匀分布的样本值 |
# -*- coding: utf-8 -*-
import numpy as np
import numpy.random as np_random
from random import normalvariate
print('正态分布随机数')
samples = np.random.normal(size=(4, 4))
print(samples)
print('批量按正态分布生成0到1的随机数')
N = 10
print([normalvariate(0, 1) for _ in xrange(N)])
print(np.random.normal(size = N)) # 与上面代码等价