此篇记录在python实操过程中遇见的问题以及最终的解决办法
1 | # 导入常用的包 |
写在最前
- 善用帮助:函数和文档
- 多用函数和循环,减少代码量
读写文件的几种方式
python
- f.read();f.readline();f.readlines()
- f.write();f.writelines();f.close()
- f.seek();f.tell();
numpy
- numpy.loadtxt();numpy.savetxt()
- numpy.tofile();numpy.fromfile()
- numpy.genfromtxt();numpy.recfromcsv()
- numpy.save();numpy.load() .npy
- numpy.savez();numpy.loadz() .npz
- numpy.savez_compressed()
scipy
- scipy.io.savemat();scipy.io.loadmat()
pandas
- pd.read_csv()
- pd.read_hdf()
- pd.read_excel()
读取图像
scipy
- scipy.misc.imread()
matplotlib.pyplot
- plt.imread()
scikit-image:
- skimage.io
1 | # help(np.loadtxt) |
速查表
- Bokeh:Bokeh 是 Python 的交互式可视图库,用于生成在浏览器里显 示的大规模数据集高性能可视图。
- jupyter notebook:Jupyter将代码与文本封装为三种类型的单元格:Markdown、代码与 NBConvert
- Keras:Keras是强大、易用的深度学习库,基于Theano和TensorFlow提供 了高阶神经网络API,用于开发和评估深度学习模型。
- Matplotlib:Matplotlib 是 Python 的二维绘图库,用于生成符合出版质量或 跨平台交互环境的各类图形
- Numpy:Numpy 是 Python 数据科学计算的核心库,提供了高性能的多维数组对象及处 理数组的工具。
- Pandas:Pandas 是基于 Numpy 创建的 Python 库,为 Python 提供 了易于使用的数据结构和数据分析工具。
- Skit-Learn:Scikit-learn 是开源的 Python 库,通过统一的界面实现 机器学习、预处理、交叉验证及可视化算法。
- Seaborn:Seaborn 是基于 matplotlib 开发的高阶Python 数据可视图库, 用于绘制优雅、美观的统计图形。
- 导入数据:大多数情况下,都是用 Numpy 或 Pandas 导入数据。
numpy
numpy 索引
- 切片和索引
- 高级索引
- 整数数组索引
- 布尔索引
- 花式索引
1 | import numpy as np |
1 | b = a[1] |
1 | array([[16, 17, 18, 19], |
1 | b[1:3,1:3]=True |
1 | array([[16, 17, 18, 19], |
1 | mask = np.empty((256,256)) |
1 | <matplotlib.image.AxesImage at 0x17ab71641f0> |
1 | mask |
1 | array([[0., 0., 0., ..., 0., 0., 0.], |
1 | temp = np.full((256,256),5) |
1 | <matplotlib.image.AxesImage at 0x17ab718ddf0> |
1 | mask = mask.astype('bool') |
1 | mask |
1 | array(False, False, False, ..., False, False, False , |
1 | print(np.shape(temp[mask])) |
1 | (9092,) |
1 | plt.imshow(mask) |
1 | <matplotlib.image.AxesImage at 0x17755787100> |
1 |
1 |
创建数组array和矩阵matrix
numpy中二者几乎等效,且array更高效
1 | import numpy as np |
1 | [2 3 4] |
1 | b = np.arange(12).reshape(4,3) |
1 | array([[ 0, 1, 2], |
基本运算
- 广播运算
- 元素乘法
- 矩阵乘法
1 | # 广播运算 |
1 | [0 1 2 3] |
1 | # 对应元素相乘 |
1 | array([ 0, 30, 80, 150]) |
1 | # 矩阵乘法 |
1 | [[2 0] |
1 | temp = np.arange(4).reshape(2,2) |
1 | array([[0, 1], |
1 | temp.mean() |
1 | 1.5 |
1 | temp.mean(axis=0) |
1 | array([1., 2.]) |
1 | temp.mean(axis=1) |
1 | array([0.5, 2.5]) |
1 | temp1 = np.arange(8).reshape(2,2,2) |
1 | array([[[0, 1], |
1 | temp1[0,0,0] |
1 | 0 |
1 | temp1[1,0,0] |
1 | 4 |
1 | temp1.mean(axis=0) |
1 | array([[2., 3.], |
1 | temp1.mean(axis=1) |
1 | array([[1., 2.], |
1 | temp1.mean(axis=2) |
1 | array([[0.5, 2.5], |
1 |
1 | # 广播运算 |
1 |
1 |
1 |
线性代数
1 | import numpy as np |
1 | a= |
python图像处理
scipy 图像处理
1 | from scipy import misc |
几何变换
1 | from scipy import ndimage |
1 | (1536, 2048) |
1 | plt.figure(figsize=(10,12)) |
1 | (-0.5, 2047.5, 1535.5, -0.5) |
1 | # Load some data |
图像过滤
1 | # Load some data |
数学形态学运算
- 二值形态学
- Erosion 腐蚀; scipy.ndimage.binary_erosion()
- Dilation 膨胀; scipy.ndimage.binary_dilation()
- Opening 开运算; scipy.ndimage.binary_opening()
- Closing 闭运算; scipy.ndimage.binary_closing()
- 灰度形态学
1 |
图像处理:scikit-image
1 | import numpy as np |
1 | <matplotlib.image.AxesImage at 0x17ab70e3af0> |
1 | import skimage |
1 | camera = data.camera() |
1 | numpy.ndarray |
图像处理:scipy.ndimage
1 | from scipy import misc |
1 | --------------------------------------------------------------------------- |
1 | from scipy import misc |
1 | face.tofile('face1.raw') # Create raw file |
1 | face_memmap = np.memmap('face.raw', dtype=np.uint8, shape=(768, 1024, 3)) |
1 | for i in range(10): |
1 | f = misc.face(gray=True) # retrieve a grayscale image |
1 | plt.imshow(f, cmap=plt.cm.gray, vmin=30, vmax=200) |
1 | plt.contour(f, [50, 200]) |
1 | face = misc.face(gray=True) |
1 | face[0, 40] |
1 | face[10:13, 20:23] |
1 | face[100:120] = 255 |
1 | lx, ly = face.shape |
1 | X, Y = np.ogrid[0:lx, 0:ly] |
1 | face[mask] = 0 |
1 | face[range(400), range(400)] = 255 |
1 | plt.imshow(face, cmap=plt.cm.gray) |
1 |
Pandas
creation
- Series
- by passing a list of values, letting pandas create a defualt integer index
- pd.Series(value,index=list)
- DataFrame
- by passing a NumPy array
- by passing a dict of objects
- df.dtypes
viewing data
1 | - df.head();df.tail();df.index;df.columns. |
selection
1 | 1. selection by label: df.loc[]; df.at[] |
missing data
1 | import numpy as np |
1 | 0 1.0 |
1 | dates = pd.date_range('20130101',periods=6) |
1 | DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', |
1 | df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) |
A | B | C | D | |
---|---|---|---|---|
2013-01-01 | 0.024195 | 0.192700 | -1.662034 | -1.575218 |
2013-01-02 | 1.772569 | 2.583528 | -1.617492 | 1.292106 |
2013-01-03 | 1.404551 | 0.511434 | -0.130941 | -0.180790 |
2013-01-04 | -1.088395 | -0.959165 | 0.931658 | 1.973182 |
2013-01-05 | -0.733413 | 1.216093 | 0.712507 | 0.151266 |
2013-01-06 | -0.583591 | -0.677252 | -0.045332 | 1.818146 |
1 | df2 = pd.DataFrame({'A': 1., |
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | 1.0 | 2013-01-02 | 1.0 | 3 | test | foo |
1 | 1.0 | 2013-01-02 | 1.0 | 3 | train | foo |
2 | 1.0 | 2013-01-02 | 1.0 | 3 | test | foo |
3 | 1.0 | 2013-01-02 | 1.0 | 3 | train | foo |
1 | df2.dtypes |
1 | A float64 |
1 | df |
A | B | C | D | |
---|---|---|---|---|
2013-01-01 | 0.024195 | 0.192700 | -1.662034 | -1.575218 |
2013-01-02 | 1.772569 | 2.583528 | -1.617492 | 1.292106 |
2013-01-03 | 1.404551 | 0.511434 | -0.130941 | -0.180790 |
2013-01-04 | -1.088395 | -0.959165 | 0.931658 | 1.973182 |
2013-01-05 | -0.733413 | 1.216093 | 0.712507 | 0.151266 |
2013-01-06 | -0.583591 | -0.677252 | -0.045332 | 1.818146 |
1 | df.head() |
A | B | C | D | |
---|---|---|---|---|
2013-01-01 | 0.024195 | 0.192700 | -1.662034 | -1.575218 |
2013-01-02 | 1.772569 | 2.583528 | -1.617492 | 1.292106 |
2013-01-03 | 1.404551 | 0.511434 | -0.130941 | -0.180790 |
2013-01-04 | -1.088395 | -0.959165 | 0.931658 | 1.973182 |
2013-01-05 | -0.733413 | 1.216093 | 0.712507 | 0.151266 |
1 | df.tail(3) |
A | B | C | D | |
---|---|---|---|---|
2013-01-04 | -1.088395 | -0.959165 | 0.931658 | 1.973182 |
2013-01-05 | -0.733413 | 1.216093 | 0.712507 | 0.151266 |
2013-01-06 | -0.583591 | -0.677252 | -0.045332 | 1.818146 |
1 | df.index |
1 | DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', |
1 | df.columns |
1 | Index(['A', 'B', 'C', 'D'], dtype='object') |
1 | df.to_numpy() |
1 | array([[ 0.02419536, 0.1927002 , -1.66203397, -1.57521826], |
1 | df2.to_numpy() |
1 | array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'], |
1 | df.describe() |
A | B | C | D | |
---|---|---|---|---|
count | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
mean | 0.132653 | 0.477890 | -0.301939 | 0.579782 |
std | 1.189356 | 1.300815 | 1.115929 | 1.370302 |
min | -1.088395 | -0.959165 | -1.662034 | -1.575218 |
25% | -0.695957 | -0.459764 | -1.245855 | -0.097776 |
50% | -0.279698 | 0.352067 | -0.088137 | 0.721686 |
75% | 1.059462 | 1.039928 | 0.523047 | 1.686636 |
max | 1.772569 | 2.583528 | 0.931658 | 1.973182 |
1 | df.T |
2013-01-01 | 2013-01-02 | 2013-01-03 | 2013-01-04 | 2013-01-05 | 2013-01-06 | |
---|---|---|---|---|---|---|
A | 0.024195 | 1.772569 | 1.404551 | -1.088395 | -0.733413 | -0.583591 |
B | 0.192700 | 2.583528 | 0.511434 | -0.959165 | 1.216093 | -0.677252 |
C | -1.662034 | -1.617492 | -0.130941 | 0.931658 | 0.712507 | -0.045332 |
D | -1.575218 | 1.292106 | -0.180790 | 1.973182 | 0.151266 | 1.818146 |
1 | df |
A | B | C | D | |
---|---|---|---|---|
2013-01-01 | 0.024195 | 0.192700 | -1.662034 | -1.575218 |
2013-01-02 | 1.772569 | 2.583528 | -1.617492 | 1.292106 |
2013-01-03 | 1.404551 | 0.511434 | -0.130941 | -0.180790 |
2013-01-04 | -1.088395 | -0.959165 | 0.931658 | 1.973182 |
2013-01-05 | -0.733413 | 1.216093 | 0.712507 | 0.151266 |
2013-01-06 | -0.583591 | -0.677252 | -0.045332 | 1.818146 |
1 | df.sort_index(axis=1,ascending=False) |
D | C | B | A | |
---|---|---|---|---|
2013-01-01 | -1.575218 | -1.662034 | 0.192700 | 0.024195 |
2013-01-02 | 1.292106 | -1.617492 | 2.583528 | 1.772569 |
2013-01-03 | -0.180790 | -0.130941 | 0.511434 | 1.404551 |
2013-01-04 | 1.973182 | 0.931658 | -0.959165 | -1.088395 |
2013-01-05 | 0.151266 | 0.712507 | 1.216093 | -0.733413 |
2013-01-06 | 1.818146 | -0.045332 | -0.677252 | -0.583591 |
1 | df.sort_values(by='B') |
A | B | C | D | |
---|---|---|---|---|
2013-01-04 | -1.088395 | -0.959165 | 0.931658 | 1.973182 |
2013-01-06 | -0.583591 | -0.677252 | -0.045332 | 1.818146 |
2013-01-01 | 0.024195 | 0.192700 | -1.662034 | -1.575218 |
2013-01-03 | 1.404551 | 0.511434 | -0.130941 | -0.180790 |
2013-01-05 | -0.733413 | 1.216093 | 0.712507 | 0.151266 |
2013-01-02 | 1.772569 | 2.583528 | -1.617492 | 1.292106 |
1 | df['A'] |
1 | 2013-01-01 0.024195 |
1 | df[0:3] |
A | B | C | D | |
---|---|---|---|---|
2013-01-01 | 0.024195 | 0.192700 | -1.662034 | -1.575218 |
2013-01-02 | 1.772569 | 2.583528 | -1.617492 | 1.292106 |
2013-01-03 | 1.404551 | 0.511434 | -0.130941 | -0.180790 |
1 | df['20130102':'20130104'] |
A | B | C | D | |
---|---|---|---|---|
2013-01-02 | 1.772569 | 2.583528 | -1.617492 | 1.292106 |
2013-01-03 | 1.404551 | 0.511434 | -0.130941 | -0.180790 |
2013-01-04 | -1.088395 | -0.959165 | 0.931658 | 1.973182 |
1 | df.loc[dates[0]] |
1 | A 0.024195 |
1 | df.loc[:,['A','B']] |
A | B | |
---|---|---|
2013-01-01 | 0.024195 | 0.192700 |
2013-01-02 | 1.772569 | 2.583528 |
2013-01-03 | 1.404551 | 0.511434 |
2013-01-04 | -1.088395 | -0.959165 |
2013-01-05 | -0.733413 | 1.216093 |
2013-01-06 | -0.583591 | -0.677252 |
1 | df.loc['20130102':'20130104',['A','B']] |
A | B | |
---|---|---|
2013-01-02 | 1.772569 | 2.583528 |
2013-01-03 | 1.404551 | 0.511434 |
2013-01-04 | -1.088395 | -0.959165 |
1 | df.loc['20130102', ['A', 'B']] |
1 | A 1.772569 |
1 | df.loc[dates[0], 'A'] |
1 | 0.024195360467579575 |
1 | df.at[dates[0], 'A'] |
1 | 0.024195360467579575 |
1 | df.iloc[3] |
1 | A -1.088395 |
1 | df.iloc[3:5, 0:2] |
A | B | |
---|---|---|
2013-01-04 | -1.088395 | -0.959165 |
2013-01-05 | -0.733413 | 1.216093 |
1 | df.iloc[[1, 2, 4], [0, 2]] |
A | C | |
---|---|---|
2013-01-02 | 1.772569 | -1.617492 |
2013-01-03 | 1.404551 | -0.130941 |
2013-01-05 | -0.733413 | 0.712507 |
1 | df.iloc[1:3, :] |
A | B | C | D | |
---|---|---|---|---|
2013-01-02 | 1.772569 | 2.583528 | -1.617492 | 1.292106 |
2013-01-03 | 1.404551 | 0.511434 | -0.130941 | -0.180790 |
1 | df.iloc[:, 1:3] |
B | C | |
---|---|---|
2013-01-01 | 0.192700 | -1.662034 |
2013-01-02 | 2.583528 | -1.617492 |
2013-01-03 | 0.511434 | -0.130941 |
2013-01-04 | -0.959165 | 0.931658 |
2013-01-05 | 1.216093 | 0.712507 |
2013-01-06 | -0.677252 | -0.045332 |
pandas 索引
中括号索引
1 | df[0:3] |
1 | df[0:1] |
1 | df['A'] |
1 | df.A |
1 | df['A':'D'] |
1 | df[[0:3],[0:3]] |
1 |
中括号只能索引行与单列
单列的索引,只能是自定义标签,且可以用df.columns_name表示。
行的索引可以用两套索引,但必须带冒号,且顾头不顾尾(按python惯例)。
按标签索引:.loc[[],[]]
同矩阵的索引类似,顾头顾尾,行列的部分的中括号可以酌情省略。
.iat[[],[]],同.iloc[[],[]],但速度更快。
按位置索引:.iloc[[],[]]
同矩阵的索引类似,顾头不顾尾,行列的部分的中括号可以酌情省略。
.iat[[],[]],同.iloc[[],[]],但速度更快。
E 布尔索引
1 |
Scipy
scipy.special
1 | import numpy as np |
1 | from scipy import constants as con |
1 | con.pi |
1 | 3.141592653589793 |
1 | import math |
1 | 3.141592653589793 |
1 | con.golden |
1 | 1.618033988749895 |
1 | con.golden_ratio |
1 | 1.618033988749895 |
1 | con.c |
1 | 299792458.0 |
1 | con.speed_of_light |
1 | 299792458.0 |
1 | con.speed_of_sound |
1 | 340.5 |
1 | con.mu_0 |
1 | 1.25663706212e-06 |
1 | con.epsilon_0 |
1 | 8.8541878128e-12 |
1 | # help(con.physical_constants) |
1 | con.physical_constants['alpha particle mass'] |
1 | (6.6446573357e-27, 'kg', 2e-36) |
1 | con.value |
1 | <function scipy.constants.codata.value(key)> |
1 | from scipy import special as scs |
1 | scs.geterr() |
1 | {'singular': 'ignore', |
1 | v = 5 |
1 |
1 | m = 0 |
1 |
1 |
1 |
scipy.optimize 练习
在数学最优化中,Rosenbrock函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock在1960年提出。也称为Rosenbrock山谷或Rosenbrock香蕉函数,也简称为香蕉函数。
$f(x,y) = (1-x)^2 +100(y-x^2)^2$
Rosenbrock函数的每个等高线大致呈抛物线形,其全域最小值也位在抛物线形的山谷中(香蕉型山谷)。很容易找到这个山谷,但由于山谷内的值变化不大,要找到全域的最小值相当困难。其全域最小值位于 (x,y)=(1,1)点,数值为f(x,y)=0。有时第二项的系数不同,但不会影响全域最小值的位置。
1 | def fun_rosenbrock(x): |
1 | import numpy as np |
1 | [1. 1.] |
1 | def jac_rosenbrock(x): |
1 | res_2 = least_squares(fun_rosenbrock, x0_rosenbrock, jac_rosenbrock, |
1 | [1.22437075 1.5 ] |
1 | from scipy.optimize import leastsq |
1 | (array([2.99999999]), 1) |
1 |
python 插值:scipy.interpolate
1 | from scipy import interpolate as si |
1 | # 1维插值 interp1d |
1 | # 多变量插值:griddata |
1 | # 样条插值 |
1 | yder = si.splev(xnew, tck, der=1) |
外推法:Scipy.UnivariateSpline
1 | from scipy import interpolate |
1 | import numpy as np |
1 |
1 | # 移动平均算法:一种趋势算法。 |
1 | x2=np.linspace(0,20,20) |
1 |
1 |
1 | y2 |
1 | array([ 2.13802457, 5.61154911, 6.05997104, 9.16678043, 9.60155538, |
1 | ls = [1,2,3,4,5] |
1 |
1 | temp |
1 | [2.1380245690246995, |
1 | plt.plot(temp) |
1 |
1 | 3*ls[0] - sum(ls[:2]) |
1 | 0 |
1 | ls[:2] |
1 | [-13, -3] |
1 | import scipy |
1 | scipy.interpolate.Akima1DInterpolator.extrapolate?? |
1 | [1;31mType:[0m member_descriptor |
1 | scipy.__version__ |
1 | '1.5.0' |
1 | import matplotlib.pyplot as plt |
光谱平滑 :Scipy.signal.savgol_fliter
- 移动平滑
- Savitzky-Golay卷积平滑
- SG平滑算法;多项式平滑算法; 卷积平滑。
- 是一种在时域内基于局域多项式最小二乘法拟合的滤波方法。这种滤波器最大的特点在于在滤除噪声的同时可以确保信号的形状、宽度不变。
- S-G滤波器
python 最小二乘相关函数
非线性最小二乘
- least_squares
变量要有边界
- 目标函数,非线性最小二乘里面称为残差(测量值与预测值之差)
当我们用一个模型来描述现实中的一系列数据时,模型的预测结果与实际的测量结果总会存在一定偏差,这一偏差就称为残差。非线性最小二乘的目的就是,调整模型的参数,使得总的残差最小。
残差的平方和是最佳的目标函数
- 损失函数,减少异常值的影响,多种方式可选
- 代价函数,$0.5\sum \rho(f(x)^2)$
- 高斯-牛顿法(Gauss-Newton method)
- 列文伯格-马夸尔特法(Levenberg-Marquardt method)
在给定变量范围内,找到代价函数的局部最小值
参数
- 必须给定参数
- 函数
- 初值
- 其它参数可选
- 对于非线性模型的最小二乘问题是没有线性解析解的
- 对没有解析解的问题,通常都是用 逐渐逼近 的思想去解决。而迭代法就正是这种思想的一种重要实现手段。
- 最小二乘,广义上来说其实是机器学习中的平方损失函数
- 线性最小二乘有闭式解,可用最小二乘法求解,也可采用迭代法(如梯度下降)求解;非线性最小二乘没有闭式解,只能采用迭代法求解。
线性最小二乘
- nnls;This is a wrapper for a FORTRAN non-negative least squares solver.
- lsq_linear;Solve a linear least-squares problem with bounds on the variables.
1 | from scipy.optimize import nnls |
1 | (array([1.5, 1. ]), 0.7071067811865475) |
1 | from scipy.sparse import rand |
1 | The relative change of the cost function is less than `tol`. |
曲线拟合
- curve_fit;Use non-linear least squares to fit a function, f, to data.
输入值:
- 函数:
- xdata
- ydata
- 其他参数可选
返回值:
- 最优参数;此时,残差平方和最小
- 参数的估计方差;
To compute one standard deviation errors on the parameters use perr = np.sqrt(np.diag(pcov)).
1 | import matplotlib.pyplot as plt |
1 | def func(x, a, b, c): |
1 | xdata = np.linspace(0, 4, 50) |
1 | xdata = np.linspace(-10, 10, num=20) |
1 | plt.plot(xdata,ydata) |
1 |
1 | def f2(x, a, b): |
1 | guess = [2, 2] |
1 | array([1.00278316, 9.10173369]) |
1 | a = params[0] |
1 | plt.plot(xdata,ydata) |
1 |
Matplotlib
CSDN_matplotlib详解
1 | %matplotlib inline |
Colormap reference
记住一个参数:
plt.get_cmap('str')
Reference for colormaps included with Matplotlib.
A reversed version of each of these colormaps is available by appending_r
to the name, e.g., viridis_r
.
See :doc:/tutorials/colors/colormaps
for an in-depth discussion about
colormaps, including colorblind-friendliness.
1 | import numpy as np |
References
“”””””””””
The use of the following functions, methods, classes and modules is shown
in this example:
1 | import matplotlib |
1 | <function matplotlib.axes._base._AxesBase.set_axis_off(self)> |
1 |
1 |
1 | import matplotlib.pyplot as plt |
1 | import matplotlib.pyplot as plt |
1 | import matplotlib.pyplot as plt |
1 | import matplotlib.pyplot as plt |
1 |
Matplotlib 三维图
1 | from mpl_toolkits.mplot3d import axes3d |
1 | fig = plt.figure() |
1 |
1 |
1 | from scipy import optimize # 优化是寻找最小化或等式的数值解的问题 |
1 | # 1. 寻找标量函数的最小值 |
1 | x = np.arange(-10,10,0.1) |
1 |
1 | #找到这个函数的最小值的常用有效方式是从给定的初始点开始进行一个梯度下降 |
1 | Optimization terminated successfully. |
1 | #这个方法的一个可能问题是,如果这个函数有一些局部最低点,算法可能找到这些局部最低点而不是全局最低点,这取决于初始点 |
1 | array([3.83746709]) |
1 | # 暴力算法找到全局最优点 |
1 | array([-1.30641113]) |
1 | #要找出局部最低点,让我们用scipy.optimize.fminbound将变量限制在(0,10)区间 |
1 | 3.8374671194983834 |
1 |
1 | # 2. 寻找标量函数的根 |
1 | root = optimize.fsolve(f, 1) # 我们的最初猜想是1 |
1 | array([0.]) |
1 | root2 = optimize.fsolve(f, -2.5) |
1 | array([-2.47948183]) |
1 |
1 |
1 |
1 |
1 |
直方图
1 | import numpy as np |
1 | n.shape |
1 | (259,) |
1 | len(np.arange(40,170,0.5)) |
1 | 260 |
1 | plt.bar(np.arange(40,170,0.5)[:-1],n*0.5) |
1 | <BarContainer object of 259 artists> |
1 | import pandas as pd |
1 | temp = pd.read_csv(r'C:\Users\hp\Desktop\P59.csv') |
OBJECTID | pointid | grid_code | RASTERVALU | |
---|---|---|---|---|
0 | 751834 | 751834 | 0.316 | 0.316 |
1 | 751833 | 751833 | 0.301 | 0.301 |
2 | 751832 | 751832 | 0.277 | 0.277 |
3 | 639012 | 639012 | 0.276 | 0.276 |
4 | 639013 | 639013 | 0.272 | 0.272 |
... | ... | ... | ... | ... |
1043770 | 880209 | 880209 | 0.001 | 0.001 |
1043771 | 880212 | 880212 | 0.001 | 0.001 |
1043772 | 904890 | 904890 | 0.001 | 0.001 |
1043773 | 905145 | 905145 | 0.001 | 0.001 |
1043774 | 1005453 | 1005453 | 0.001 | 0.001 |
1043775 rows × 4 columns
1 | temp = temp[temp.RASTERVALU<0.2] |
OBJECTID | pointid | grid_code | RASTERVALU | |
---|---|---|---|---|
46 | 638757 | 638757 | 0.199 | 0.199 |
47 | 775890 | 775890 | 0.198 | 0.198 |
48 | 170770 | 170770 | 0.195 | 0.195 |
49 | 638886 | 638886 | 0.194 | 0.194 |
50 | 638756 | 638756 | 0.193 | 0.193 |
... | ... | ... | ... | ... |
1043770 | 880209 | 880209 | 0.001 | 0.001 |
1043771 | 880212 | 880212 | 0.001 | 0.001 |
1043772 | 904890 | 904890 | 0.001 | 0.001 |
1043773 | 905145 | 905145 | 0.001 | 0.001 |
1043774 | 1005453 | 1005453 | 0.001 | 0.001 |
1043729 rows × 4 columns
1 | x = temp.RASTERVALU |
1 | n,bins,patches = plt.hist(x,bins=np.arange(0,0.2,0.001),density=True) |
1 | plt.bar(bins[:-1],n*0.001,width=0.001) |
1 | <BarContainer object of 199 artists> |
plt.style
1 | plt.style.use('seaborn') |
1 | print(plt.style.available) |
1 | ['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10'] |
1 |
1 |
1 |
- enumerate
- 生成式
- 生成器
容器数据类型
- 字符串
- 列表
注意多重列表
注意:乘法可重复列表元素
- 元组:不可修改元素,便于维护,进程安全,创建更快。
- 集合:和数学上一致,大括号
- 字典:键值对
- 构造器语法?
- 推导式语法?
类和对象
类是对象的蓝图和模板,而对象是类的实例
- 私有属性和方法:两个下划线开头。
- 单下划线开头表示属性是受保护的。
1 |
正则表达式
- 速查表:https://www.debuggex.com/cheatsheet/regex/python
- 30分钟入门教程:https://deerchao.cn/tutorials/regex/regex.htm
- 在线验证网站:https://tool.oschina.net/regex/
正则表示即匹配规则
- 处理字符串
- 爬取网页
- 元字符
- 限定符
- 精准匹配
1 | import re |
1 | # 匹配电话号 |
1 | ['13888888888', '13666666666'] |
1 |
1 |
1 |
1 |
1 |
1 |
1 | from scipy.signal import savgol_filter |
用sympy求解方程
1 | 1-4/(1.5*2.5**2) |
1 | 0.5733333333333333 |
1 | (0.5/2.5)**2+0.05 |
1 | 0.09000000000000001 |
1 | 0.91*0.43 |
1 | 0.3913 |
1 | from sympy import * |
1 | x, y, z, t = symbols('x y z t') |
1 | f = Rational(3,2)*pi + exp(I*x) / (x**2 + y) |
$\displaystyle \frac{3 \pi}{2} + \frac{e^{i x}}{x^{2} + y}$
1 |
1 | x = Symbol('x') |
$\displaystyle -1.0$
1 | g = exp(I*x) |
$\displaystyle e^{i x}$
1 | h = f + g |
$\displaystyle e^{i x} + \frac{3 \pi}{2} + \frac{e^{i x}}{x^{2} + y}$
1 | exp(I*x).subs(x,pi) |
$\displaystyle -1$
1 |
1 |
1 | expr.args |
1 | (x, 2*y) |
1 | exp(pi * sqrt(163)).evalf() # 计算数值解,括号内参数为有效数字位,默认15? |
$\displaystyle 2.62537412640769 \cdot 10^{17}$
1 | exp(pi * sqrt(163)) |
$\displaystyle e^{\sqrt{163} \pi}$
1 | latex(S('2*4+10',evaluate=False)) # Latex格式 |
1 | '2 \\cdot 4 + 10' |
1 | latex(exp(x*2)/2) |
1 | '\\frac{e^{2 x}}{2}' |
1 | ((x+y)**2 * (x+1)).expand() # 展开 |
$\displaystyle x^{3} + 2 x^{2} y + x^{2} + x y^{2} + 2 x y + y^{2}$
1 | ((x+y)**2 * (x+1)) |
$\displaystyle \left(x + 1\right) \left(x + y\right)^{2}$
1 | a = 1/x + (x*sin(x) - 1)/x |
$\displaystyle \frac{x \sin{\left(x \right)} - 1}{x} + \frac{1}{x}$
1 | simplify(a) |
$\displaystyle \sin{\left(x \right)}$
1 | solve(Eq(x**3 + 2*x**2 + 4*x + 8, 0), x) |
1 | [-2, -2*I, 2*I] |
1 | solve(x**3 + 2*x**2 + 4*x + 8, x) |
1 | [-2, -2*I, 2*I] |
1 | solve([Eq(x + 5*y, 2), Eq(-3*x + 6*y, 15)], [x, y]) |
1 | {x: -3, y: 1} |
1 | solve([x + 5*y - 2, -3*x + 6*y - 15], [x, y]) |
1 | {x: -3, y: 1} |
1 | y=Function('y') |
$\displaystyle y{\left(n \right)} - 5 y{\left(n - 2 \right)} - 2 y{\left(n - 1 \right)}$
1 | rsolve(f,y(n),[1,4]) |
$\displaystyle \left(\frac{1}{2} - \frac{\sqrt{6}}{4}\right) \left(1 - \sqrt{6}\right)^{n} + \left(\frac{1}{2} + \frac{\sqrt{6}}{4}\right) \left(1 + \sqrt{6}\right)^{n}$
1 | a, b = symbols('a b') |
$\displaystyle \sum_{n=a}^{b} \left(2^{n} + 6 n^{2}\right)$
1 | s.doit() |
$\displaystyle - 2^{a} + 2^{b + 1} - 2 a^{3} + 3 a^{2} - a + 2 b^{3} + 3 b^{2} + b$
1 | product(n*(n+1), (n, 1, b)) |
$\displaystyle {2}^{\left(b\right)} b!$
1 | f=Function('f') |
$\displaystyle f{\left(\frac{1}{2} \right)} - 3 f{\left(2 \right)} = 2$
1 | ex.subs(x,Rational(1,2)) |
$\displaystyle - 3 f{\left(\frac{1}{2} \right)} + f{\left(2 \right)} = \frac{1}{2}$
1 | solve([f(Rational(1,2))-3*f(2)-2,-3*f(Rational(1,2))+f(2)-Rational(1,2)]) |
1 | [{f(1/2): -7/16, f(2): -13/16}] |
1 | limit((sin(x)-x)/x**3, x, 0) |
$\displaystyle - \frac{1}{6}$
1 | (1/cos(x)).series(x, 0, 6) |
$\displaystyle 1 + \frac{x^{2}}{2} + \frac{5 x^{4}}{24} + O\left(x^{6}\right)$
1 | diff(cos(x**2)**2 / (1+x), x) |
$\displaystyle - \frac{4 x \sin{\left(x^{2} \right)} \cos{\left(x^{2} \right)}}{x + 1} - \frac{\cos^{2}{\left(x^{2} \right)}}{\left(x + 1\right)^{2}}$
1 | integrate(x**2 * cos(x), x) |
$\displaystyle x^{2} \sin{\left(x \right)} + 2 x \cos{\left(x \right)} - 2 \sin{\left(x \right)}$
1 | integrate(x**2 * cos(x), (x, 0, pi/2)) |
$\displaystyle -2 + \frac{\pi^{2}}{4}$
1 | f = Function('f') |
$\displaystyle f{\left(x \right)} = C_{1} \sin{\left(3 x \right)} + C_{2} \cos{\left(3 x \right)} + \frac{1}{9}$
1 | f = Function("f") |
$\displaystyle 9 f{\left(x \right)} + \frac{d^{2}}{d x^{2}} f{\left(x \right)} = 1$
1 | dsolve(_, f(x)) |
$\displaystyle f{\left(x \right)} = C_{1} \sin{\left(3 x \right)} + C_{2} \cos{\left(3 x \right)} + \frac{1}{9}$
1 | def planck(w, T): |
1 | h = 6.626e-34 |
$\displaystyle \frac{2 c^{2} h}{\lambda^{5} \left(e^{\frac{c h}{T k \lambda}} - 1\right)}$
1 | result = P.subs(c,3.0e+8).subs(h,6.626e-34).subs(k,1.38e-23).subs(lamda,500e-9).subs(T,5777) |
$\displaystyle 2.6237 \cdot 10^{13}$
1 | # solve(Eq(P.subs(c,3.0e+8).subs(h,6.626e-34).subs(k,1.38e-23).subs(lamda,500e-9), 2.6237e13), T) |
1 | t = symbols('t',cls=Function) |
$\displaystyle \frac{c h}{k \lambda \log{\left(1 + \frac{2 c^{2} h}{I \lambda^{5}} \right)}}$
1 | t.subs(c,3.0e+8).subs(h,6.626e-34).subs(k,1.38e-23).subs(lamda,500e-9).subs(Ra,2.6237e13) |
$\displaystyle 5777.00277916166$
1 | r0 = symbols('r0',cls=Function) |
$\displaystyle \frac{1 - \sqrt{1 - w}}{\sqrt{1 - w} + 1}$
1 | solve(Eq(r0,0),w) |
1 | [0] |
1 | P = symbols('P',cls=Function) |
$\displaystyle b \cos{\left(\frac{\pi g}{180} \right)} + c \left(1.5 \cos^{2}{\left(\frac{\pi g}{180} \right)} - 0.5\right) + 1$
1 | cos(x).subs(x,pi).evalf() |
$\displaystyle -1.0$
1 | solve(Eq(P.subs(b,-0.17).subs(c,0.7),1),g) |
1 | [48.3981512828419, 120.135426949009, 239.864573050991, 311.601848717158] |
1 | def r1(w): |
1 | f = symbols('f',cls=Function) |
1 | --------------------------------------------------------------------------- |
1 | import sympy as sy |
1 | # 1.表达式与表达式求值 |
1 | 5*x + 4 |
1 | #多元表达式 |
1 | 25.0000000000000 |
1 | # 2.函数方程求解 |
1 | [-3] |
1 | #解方程 无穷多解 |
1 | [(-y**2/3, y)] |
1 | #解方程组 |
1 | {x: -1, y: 4} |
1 | # 求和 |
1 | 10100 |
1 | # 解带有求和式的方程 |
1 | [1] |
1 | # 求极限 |
1 | 1 E E |
1 | # 求导 |
1 | 15 |
1 | # 求定积分 |
1 | 1 |
1 | # 求定积分 |
1 | 2.5 |
1 | #求多重积分, |
1 | 9 |
1 |
1 |
可视化图表交互—Bokeh
Bokeh 是 Python 的交互式可视图库,用于生成在浏览器里显 示的大规模数据集高性能可视图。
1 | import numpy as np |
- 介绍与设置
- Bokeh是什么?Bokeh是用于现代浏览器端展示的交互式可视化库。
- 我能用Bokeh 做什么?
- 进行环境设置
- 依赖包
- 示例数据:bokeh sampledata
1 | from bokeh.io import output_file,show,output_notebook |
1 |
1 | output_notebook() |
1 | from numpy import cos, linspace |
1 |
1 | from bokeh.sampledata.autompg import autompg |
1 | autompg |
mpg | cyl | displ | hp | weight | accel | yr | origin | name | |
---|---|---|---|---|---|---|---|---|---|
0 | 18.0 | 8 | 307.0 | 130 | 3504 | 12.0 | 70 | 1 | chevrolet chevelle malibu |
1 | 15.0 | 8 | 350.0 | 165 | 3693 | 11.5 | 70 | 1 | buick skylark 320 |
2 | 18.0 | 8 | 318.0 | 150 | 3436 | 11.0 | 70 | 1 | plymouth satellite |
3 | 16.0 | 8 | 304.0 | 150 | 3433 | 12.0 | 70 | 1 | amc rebel sst |
4 | 17.0 | 8 | 302.0 | 140 | 3449 | 10.5 | 70 | 1 | ford torino |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
387 | 27.0 | 4 | 140.0 | 86 | 2790 | 15.6 | 82 | 1 | ford mustang gl |
388 | 44.0 | 4 | 97.0 | 52 | 2130 | 24.6 | 82 | 2 | vw pickup |
389 | 32.0 | 4 | 135.0 | 84 | 2295 | 11.6 | 82 | 1 | dodge rampage |
390 | 28.0 | 4 | 120.0 | 79 | 2625 | 18.6 | 82 | 1 | ford ranger |
391 | 31.0 | 4 | 119.0 | 82 | 2720 | 19.4 | 82 | 1 | chevy s-10 |
392 rows × 9 columns
1 | p = figure(title="MPG by Year (Japan and US)",tools="") |
1 | from bokeh.models import ColumnDataSource |
1 | # Plot a complex chart with intearctive hover in a few lines of code |
1 | df.cyl = df.cyl.astype(str) |
1 | group = df.groupby(['cyl', 'mfr']) |
1 | p = figure(plot_width=800, plot_height=300, title="Mean MPG by # Cylinders and Manufacturer", |
- 基本绘图
导入与设置:
- figure
- output_file/output_notebook/output_server
- show/save
1
2from bokeh.io import output_notebook, show
from bokeh.plotting import figure # mid-level接口:从简单的默认图表开始(使用合理的默认工具、网格和轴),添加标记和其他视觉属性直接与数据绑定的图形。- 基本的散点图:
1 | p = figure(plot_width=400, plot_height=400) |
1 | - p.circle |
基本的线形图
- p.line()
面图
- p.image_rgba()
1 | # create a new plot with default tools, using figure |
1 | # create a new plot using figure |
1 | # create a new plot (with a title) using figure |
1 | from __future__ import division |
1 | # set up some data |
- 样式与主题
颜色与属性
- 颜色:
- 颜色名称:‘green’等
- 16进制RGB(A)值
- 整数(r,g,b)(0-255)
- (r,g,b,a)(0-255;0-1)
- 属性:
- 三个API:models,plotting,charts
- 三种视觉样式属性:
- line:line_color,line_alpha,line_width,line_dash
- fill:fill_color,fill_alpha
- text:text_font,text_font_size,text_color,text_alpha
- 颜色:
Plots(框图)
- outline
- outline_line_width
- outline_line_alpha
- outline_line_color
- border
- outline
Glyphs(标记符号)
- 选择和非选择 视觉效果
- Axes(轴)
- Grid(网格)
1 | # create a new plot with a title |
1 | p = figure(plot_width=400, plot_height=400) |
1 | p = figure(plot_width=400, plot_height=400, tools="tap", title="Select a circle") |
- 添加注释
- Span :Spans是“无限”的垂直线或水平线。
- Box Annotations(Box注释)
- Label(标签)
- LabelSet(标签集)
- Arrows(箭头)
- Legends(图例)
1 | import numpy as np |
1 | import numpy as np |
1 | from bokeh.models.annotations import Label |
1 | from bokeh.plotting import figure |
1 | from bokeh.models.annotations import Arrow |
1 | import numpy as np |
1 | p.circle(x, y, legend_label="sin(x)") |
1 | from bokeh.sampledata.autompg import autompg |
- 数据源和数据转换
- Bokeh的ColumnDataSource类型
- 通过 Python Dicts 创建
- 通过 Pandas DataFrames 创建
1 | from bokeh.models import ColumnDataSource |
1 | from bokeh.sampledata.iris import flowers as df |
- 演示布局:把多个图表(plot)放在一个布局(layout)里
- 行与列:bokeh.layouts 模块提供了 row 和 column 功能以便在垂直和水平布局中排列图表
- 网格图:Bokeh还在 bokeh.layouts 模块中提供了一个 gridplot 布局,以便把图表排列成一个网格图
1 | from bokeh.layouts import row |
1 | from bokeh.layouts import gridplot |
- 关联和交互:把不同的图表联系起来,把图表和控件(widget)联系起来
- Linked Interactions:
- 不同的Bokeh图表之间是可以有联系的,两个(或更多)图的范围可能是由联系的,当一个图被平移(或放大,或其范围变化),其它的图也相应更新保持一致。还可以将两个图的选择(selection)联系起来,当在一个图上选择某项时,另一个图中对应的项也被选中。
- Linked panning(相连的平移)
- Linked brushing
- 相连的选择(selection)通过类似的方式完成,在图块之间共享数据源。注意,通常 bokeh.plotting 和 bokeh.charts 会自动创建一个缺省数据源。然而,为了共享数据源,我们必须手动创建它们并显式地传递。
- Hover Tools(悬停工具)
- Bokeh有一个悬停的工具,当用户将鼠标悬停在一个特定的标记符号(glyph)上时,可以在一个弹出框里显示更多的信息。基本的悬停工具配置相当于提供一个 (name, format) 元组列表。
- Widgets(控件)
- Bokeh直接集成了一个小的基本控件集。这些控件和Bokeh服务器或 CustomJS 模型协作使用可以加入更多的互动的功能。您可以在用户指南的 Adding Widgets 部分看到完整的widget列表和示例代码。
- CustomJS Callbacks(CustomJS回调)
1 | from bokeh.layouts import gridplot |
1 | from bokeh.models import ColumnDataSource |
1 | from bokeh.models import HoverTool |
1 | from bokeh.layouts import widgetbox |
1 | BokehDeprecationWarning: 'WidgetBox' is deprecated and will be removed in Bokeh 3.0, use 'bokeh.models.Column' instead |
1 | from bokeh.models import TapTool, CustomJS, ColumnDataSource |
1 | from bokeh.layouts import column |
1 | from random import random |
1 | --------------------------------------------------------------------------- |
1 | $ bokeh sampledata |
1 | from bokeh.plotting import figure |
1 | import pandas as pd |
1 | for data, name, color in zip([AAPL, IBM, MSFT, GOOG], ["AAPL", "IBM", "MSFT", "GOOG"], Spectral4): |
1 | from bokeh.io import show |
1 | from bokeh.io import show |
1 | from bokeh.io import show |
1 | temp = zip([1,2],['a','b']) |
1 | <zip 0x1cad5461880> |
1 | zip? |
1 | [1;31mInit signature:[0m [0mzip[0m[1;33m([0m[0mself[0m[1;33m,[0m [1;33m/[0m[1;33m,[0m [1;33m*[0m[0margs[0m[1;33m,[0m [1;33m**[0m[0mkwargs[0m[1;33m)[0m[1;33m[0m[1;33m[0m[0m |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 | import pandas as pd |
1 | df |
1 | df[df > 0] |
1 | df[df['A'].isin(['a', 'b'])] |
1 |
1 |
1 | import matplotlib.pyplot as plt |
1 | import matplotlib.pyplot as plt |
1 | --------------------------------------------------------------------------- |
1 |
1 |
OS模块
- os.getcwd()
- os.name()
- os.path()
- os.listdir()
- os.rename()
1 | import os |
1 | E:\GitHubWP\JupyterWP |
1 | import os.path as op |
1 | results = op.abspath('./OS创建文件夹') # 返回绝对路径 |
1 | \\GitHubWP\\JupyterWP\\OS创建文件夹' : |
1 | # dir(op) |
1 | result = op.getctime('./OS创建文件夹') |
1 | 1609938276.518 |
1 | import time |
1 | 1609938276.518 |
1 | os.listdir(os.getcwd())[:5] # os.listdir会列出隐藏文件 |
1 | ['.ipynb_checkpoints', |
1 | # 批量修改文件名 |
1 | import os |
1 |
json模块
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同也易于机器解析和生成,并有效地提升网络传输效率。
给字典加上引号,变成字符串,即json格式字符串。
1 | json_str = '{"name":"张三"}' |
1 | {'name': '张三'} <class 'dict'> |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
基础知识新知
函数新知
“代码有很多种坏味道,重复是最坏的一种”
- 默认参数
- 可变参数
- 同名函数:python没有函数重载的概念,后面的定义会覆盖前面的定义。
- 用模块管理
- 模块中编写执行代码
if __name__ == '__main__'
- 变量作用域
格式化输出的几种方式
1 | a, b = 5, 10 |
1 | 5 * 10 = 50 |
1 | a, b = 5, 10 |
1 | 5 * 10 = 50 |
1 | a, b = 5, 10 |
1 | 5 * 10 = 50 |
列表
1 | [[1,2]]*5 |
1 | [[1, 2], [1, 2], [1, 2], [1, 2], [1, 2]] |
输入
1 | a,b =map(int,input('输入a,b逗号隔开:').split(',')) |
1 | 输入a,b逗号隔开: 1,2 |
1 | a |
1 | 1 |
1 | b |
1 | 2 |
分形
1 | import numpy as np |
批量下载脚本
1 | # 该例子来源于知乎 |
3Blue1Brown 线性代数
- 向量一般用列向量表示
线性变换矩阵:由变换后的基向量组成
- 逆时针旋转九十度:
- 旋转矩阵:
- 线性变换是操作空间的一种手段
- 列线性相关,则降维
- 将矩阵看做空间变换
矩阵乘法与线性变换复合
- 矩阵运算
- 矩阵乘法不满足交换律
- 矩阵乘法满足结合律(交换变换顺序)
- 三维空间中的线性变换
行列式
- 行列式可以理解为变换前后的伸缩比例,复数表示改变了图形的定向(感觉上像是将空间翻转了:比如,j从i的左边变换到了右边)(三维空间中的定向:右手定则)
- 只需要检验一个矩阵的行列式是否为零,就可以了解矩阵所代表的变换是否将空间压缩到更小的维度上
- 计算公式:
bc项可理解为平行四边形法则中对角线的伸缩比例。
可用伸缩比例理解。
逆矩阵、列空间、秩、零空间
- 矩阵的用途:
- 操作空间
- 求解线性方程组
- 线性方程组:求解一个向量经系数矩阵变换后得到已知的向量。
- 系数矩阵的行列式为零
- 系数矩阵的行列式不为零
- 逆变换求解:逆矩阵
- 理解矩阵与逆矩阵的乘法等于单位矩阵:恒等变换
- 矩阵行列式不为零,存在逆矩阵。
- 矩阵行列式为零,则矩阵变换将空间压缩到更低的维度上,没有逆矩阵(例,不能将一条线“解压缩”为一个平面)
- 即便行列式为零,仍然可能存在解(例,已知向量正好在压缩后的直线上)
- 秩
- 秩代表着变换后空间的维数。
- 列空间:矩阵的列所张成的空间
- 秩是列空间的维数
- 满秩
- 零向量一定为被包含在列空间中(因为线性变换必须保持原点位置不变;线性变换是基于原点的旋转伸缩变换)
- 零空间:
- 核:变换后落在原点的向量的集合,称为矩阵的零空间或核。
- 当已知向量为零向量时,零空间的向量就是对应的解。
- 非方阵的情况
- 2*矩阵的集合几何意义是将二维空间映射到三维空间上,该矩阵的列空间是三维空间中一个过原点的二维平面。
- 其他变换:二维到一维,点积?
- 矩阵的用途:
点积与对偶性(daulity)
- 几何解释:一个向量的长度乘以另一个向量的投影长度
- 交换顺序,结果不变
- 投影矩阵:与单位向量的点积可以理解为将向量投影到单位向量所在的直线上所得到的投影长度。
- 点积:列向量转转置为行向量,即投影矩阵。
叉积
- 不严谨解释
- 平行四边形的面积
- 定向:i*j = 1;i在j的右侧为正,否则为负;夹角的方向定义为从前向量转到后向量的方向。
- 二维向量可用行列式计算。(转置不改变行列式的值)
- 向量垂直时,面积最大
- 严谨解释
- 真正的叉积是通过两个三维向量产生一个新的三维向量。
- 混合积:
- 对偶向量
- 不严谨解释
基变换:不同坐标系(不同视角)
- 原点相同;基底不同
- 对方的基底在我方坐标系下的坐标组成变换矩阵A.(该矩阵将我方坐标网格转换为对方网格:对同一向量而言,则相当于将对方语言翻译为我方语言)
- 对方视角下的向量v,在我方看来则为Av.(类似将对方的语言翻译为我方的语言)
- 该矩阵A取逆,记为invA,将对方网格转换为我方网格,对同一向量而言,相当于将我方语言转换为对方语言。invA v.
线性变换不同于坐标变换,线性变换是向量在同一坐标系下的伸缩转动;坐标变换是同一向量在不同坐标系下的坐标表示。
1 | - 如何变换一个矩阵:对方基向量在我方表示为A.我方做了一个变换M,则其基向量跟着变换为MA,但这是我方的语言,在对方看来,应为 invAMA. |
特征值与特征向量
- 特征向量:在变换中留在其张成空间中的向量;变化仅有伸缩倍数,即特征值。特征值可以为负值。
- 三维旋转:三维空间中的特征向量就是旋转轴;把一个三维旋转看成绕某个轴旋转一定角度,比考虑响应的3*3矩阵直观得多。(这种情况下特征值必须为1,因为只旋转,无伸缩)
- 求解特征值与特征向量Mv=bv
- 改变形式使右边为零:(M-bI)v=0
- 右边为零向量,即被压缩,则行列式为0.可以求得特征值;特征值非实数表明没有特征向量
- 再根据特征值,像求解线性方程组那样,可以求解特征向量。
- 存在一个特征值,多个特征向量的情况,比如讲坐标拉伸2倍,则特征值为2,所有的向量都是特征向量。
- 特殊情况:基向量是特征向量;对角矩阵;对角元是特征值
- 对角矩阵乘法的计算
- 用特征向量作为基,进行变换;换到特征向量作基底的视角下,该视角下的变换矩阵必然是对角的,且对角元为特征值。(前提,特征向量能张成全空间);可应用于矩阵运算
抽象向量空间
- 行列式和特征向量不受所选坐标系的影响
- 行列式表示缩放比例
- 特征向量表示在变换中留在它所张成的空间中的向量
- 你可以自由选取坐标系,这并不会改变它们最根本的值。
- 空间性
- 函数式另一种向量?
- 向量的所有特征均可应用于函数
- 相加
- 数乘
- 线性变换:符合函数、求导
- 线性算子:一个函数式线性的?
- 线性的严格定义:可加性;成比例(一阶齐次)
- 线性变换保持向量加法运算和数乘运算
- 求导是线性运算
- 基函数
- 求导算符的矩阵:选择基函数,建立矩阵
- 向量的所有特征均可应用于函数
- 向量是什么?向量的形式不重要,只要满足向量定义的一组格则,它可以是任何东西。
- 行列式和特征向量不受所选坐标系的影响
克莱姆法则,几何解释
计算线性方程组
- 高斯消元法
- 克莱姆法则
不改变点积的变换称为正交变换,例如旋转矩阵
pyecharts
1 | from pyecharts.globals import CurrentConfig, NotebookType |
1 | from pyecharts.charts import Bar |
<!DOCTYPE html>
Geoprocessing with python
1 | from osgeo import ogr |
1 | driver = ogr.GetDriverByName('geojson') |
1 | <osgeo.ogr.Driver; proxy of <Swig Object of type 'OGRDriverShadow *' at 0x00000228D2B5C330> > |
1 | import ospybook as pb |
1 | --------------------------------------------------------------------------- |
1 | # %pip install ospybook |
1 | Note: you may need to restart the kernel to use updated packages. |
1 | """ |
正态分布
1 | import numpy as np |
1 | mean: 0.005425582125086683 |
1 |
差分法求解微分方程
1 | import numpy as np |
1 | import numpy as np |
1 | #不同时刻的温度随空间坐标的变化 |
1 | #温度等高线随时空坐标的变化,温度越高,颜色越偏红 |
最小二乘
1 | from scipy.optimize import least_squares |
1 | Iteration Total nfev Cost Cost reduction Step norm Optimality |
1 | res |
1 | active_mask: array([0, 0, 0, 0]) |
1 | res.x |
1 | array([0.192806 , 0.19130332, 0.12306046, 0.13607205]) |
1 | from scipy.optimize import leastsq |
1 | (array([4.09901951]), 2) [-1.42108547e-14] |
1 | b = leastsq(func,-20,full_output=True) |
1 | (array([-6.09901951]), |
1 | func(a[0]) |
1 | array([-1.42108547e-14]) |
1 | func(-6) |
1 | 6 |
1 | func(-7) |
1 | -70 |
1 | func(-8) |
1 | -184 |
1 | plt.plot(np.linspace(-9,5,20),func(np.linspace(-9,5,20))) |
1 | <matplotlib.lines.Line2D at 0x1fad4cb7700> |
1 | from scipy.optimize import least_squares |
1 |
1 |