python学习笔记(Data Analysis)
Python for Data Analysis
numpy基础
嗯 调整了一些顺序
1 ndarray(n维数组)
导入数据、基本运算和数组生成
import numpy as np
#矢量化 将数据转化为数组
data=[[1,2,3],[4,5,6]]
arr=np.array(data,dtype=np.float64)
new_arr=arr.astype(np.int64) #astype可以将字符串存储的数据转为数值
arr.ndim
arr.shapearr*arr
arr+arr
arr-arr #相同大小的数组运算会传递到每个元素 不需要循环
1/arr
arr**0.5 #数组与标量运算
arr2=np.array([[3,2,1],[6,5,4]],dtype=np.float64)
arr2<arr #大小相同的数组比较会产生布尔值 np.zeros(10) #第一个参数是shape
np.ones((3,6))
np.empty((2,3,2))
2 索引
基本索引和切片
大致同列表 任何数组的视图上的修改都会反映到原数据上
arr_slice=arr[0]
arr_slice[:]=1
arr #arr[0]全部转为1.
new=arr[5:8].copy() #如果从副本上修改 不修改原arr需要用copy函数
arr[0,1] #二维数组(两层中括号)的索引方式 [行,列] 高纬度依次类推
arr[0,1:] #切片时可分别对一个轴切片 只有冒号为选取整个轴
布尔型索引
相当于虚拟变量(0 1) 可以用来匹配ID 条件筛选 总是创建副本
names=np.array(['Bob','A','B','Bob','C','D','E'])
data2=np.random.randn(7,4) #生成随机矩阵
names == 'Bob' #返回True/False的一维数组 各类判断都OK
#否定 (!=) 或者~(names=='A') 多个条件用&和 |
#and和or在布尔数组中无效
data2[names == 'Bob',2:] #索引与切片结合 names长度应该与data2一致
花式索引
总是一维的 会复制到新数组
arr3=np.empty((8,4))
for i in range(8):arr3[i]=i
arr3 #eg1
arr3[[4,3,0,6]] #以特定顺序选取子集
arr3[[-3,-5,-7]]arr4=np.arange(32).reshape(8,4) #reshape整理数组 eg2
arr4[[1,5,7,2],[0,3,1,2]] #选中的是(1,0)(5,3)(7,1)(2,2)
arr4[[1,5,7,2]][:,[0,3,1,2]] #对每选中一维重新排序
数组转置&轴对称
arr.T #不会复制新数组
np.dot(arr.T,arr) #计算内积
arr5=np.arange(16).reshape((2,2,4))
arr5.transpose(1,0,2) #第一、二轴互换
arr5.swapaxes(1,2) #接受一对轴编号 返回视图
3 通用函数
元素级运算 接受一个out可选参数
np.sqrt(arr) #开方
np.exp(arr) #e的x次方
np.maximum(arr,arr2) #返回两者中最大值
np.fmax(arr,arr2) #忽略nan
np.minimum(arr,arr2) #最小值
np.fmin(arr,arr2) #忽略nan
np.abstract(arr,arr2) #arr-arr2
np.add(arr,arr2) #相加
np.divide(arr,arr2) #除法
np.mod(arr,arr2) #求模
np.floor_divide(arr,arr2) #圆整除法
np.power(arr,arr2) #arr的arr2次方
remainder, whole_part = np.modf(data2) #remainder:小数部分组成的数组 whole:整数
np.copysign(arr,arr2) #将arr2的符号给arr
np.abs(arr) #绝对值
np.fabs(arr) #非复数更快
np.square(arr) #平方
#log log10 log2 log1p
#sign 返回正负号
#ceil 大于等于该值的最小整数
#floor 小于等于该值的最大整数
#rint 四舍五入到整数 保留类型
#isnan 哪些值非数字的布尔型数组
#isfinite 哪些值有穷的布尔型数组
#isinf 哪些值无穷的布尔型数组
#cos cosh sin sinh tan tanh 普通、双曲三角函数
#arccos arccosh arcsin arcsinh arctan arctanh 反~
#logical_not(arr) 相当于-arr
#greater、greater_equal、less、less_equal、equal、not_equal 相当于比较运算符
#logical_and、logical_or、logical_xor 相当于&、|、^
4 用于数组的文件输入输出
arr=np.arange(10)
np.save('some_array',arr) #保存为npy的文件
np.load('some_array.npy') #读取数组
np.savez('array_archive.npz',a=arr,b=arr) #多个数组保存至未压缩文件 以关键字参数传入
arch=np.load('array_archive.npz') #加载数据 类似字典
arch['b']
np.savez_compressed('array_archive.npz',a=arr,b=arr) #数据压缩
5 处理数据
对一组值求距离x2+y2\sqrt{x^2+y^2}x2+y2
import numpy as np
points=np.arange(-5,5,0.01) #1000个均匀点
xs,ys=np.meshgrid(points,points) #1000*1000的矩阵
z=np.sqrt(xs**2+ys**2)
#做图 第九章_2e
import matplotlib.pyplot as plt
plt.imshow(z,cmap=plt.cm.gray);plt.colorbar()
plt.title('Image plot of $\sqrt{x^2+x^2}$ for a grid of values')
条件逻辑→数组 where
二三参数不一定为数组 可以为标量
xarr=np.array([1,2,3,4,5])
yarr=np.array([6,7,8,9,0])
cond=np.array([True,False,True,True,False])
result=np.where(cond,xarr,yarr) #当条件对应位子中为真返回xarr,为假返回yarrA=np.random.randn(4,4)
np.where(A>0,-2,2)
np.where(A>0,2,A)
排序
#就地排序会改变数组本身 np.sort返回副本
B[1].sort() #只对B的第二行排序
B.sort(1) #参数是轴 每行排序
B.sort(0)
E=np.random.randn(1000)
E.sort()
E[int(0.05*len(E))] #5%分位数 排序后计算最简单
唯一化及其他集合逻辑
names=np.array(['Bob','A','B','Bob','C','D','E'])
np.unique(names) #返回数组中的排序后唯一值
sorted(set(names))
test=np.array([1,2,8,9])
np.in1d(xarr,test) #xarr是否在test里面 返回布尔型
#intersect1d(x,y) x∩y 有序
#union1d(x,y) x∪y 有序
#setdiff1d(x,y) x-y
#setxor1d(x,y) x,y的对称差(x+y)-(x∩y)
数学和统计方法
B=np.random.randn(5,4)
B.mean()
np.mean(B)
B.sum() #sum和mean可以接受一个轴参数 结果返回少一维的数组
B.mean(axis=1) #行的均值
B.sum(axis=0) #列的和
C=xarr.cumsum() #累加和
D=np.array([[1,2,3],[4,5,6],[7,8,9]])
D.cumsum(axis=0)
D.cumprod(axis=1) #行的累计积
#std、var、min、max、argmin、argmax
#标准差、方差、最小、最大、最小的索引、最大的索引### 布尔型数组的方法
```javascript
(B>0).sum() #B中正数数量
(B>0).any() #是否存在多个True(一个True即返回True)
(B>0).all() #是否都是True (一个False即返回False)
#非0元素都会被认为True
线性代数
x=np.array([[1,2,3],[4,5,6]],dtype=np.float64)
y=np.array([[6,23],[-1,7],[8,9]],dtype=np.float64)
x.dot(y)
np.dot(x,y)
x @ y #矩阵乘法from numpy.linalg import inv, qr
X = np.random.randn(5,5)
mat=X.T.dot(X) #内积
inv(mat) #矩阵的逆
mat.dot(inv(mat)
q,r=qr(mat) #计算QR分解
#diag 返回方阵对角线的一位数组 或者一位数组转为方阵对角线
#trace 对角线元素和
#det |A|计算行列式
#eig 特征值、特征向量
#pinv Moore-Penrose广义逆
#svd 奇异值分解
#solve 解线性方程组Ax=b
#lstsq 计算Ax=b最小二乘解
伪随机数生成
sample= np.random.normal(size=(4,4))
from random import normalvariate
N=100000
%timeit sample = [normalvariate{0,1} for _ in range(N)]
%timeit np.random.normal(size=N) #np.random更快一些
np.random.seed(1234)
rng=np.random.RandomState(1234)
rng.randn(10)
#permutation 序列的随机排列 或范围
#shuffle 序列就地随机排列
#rand 均匀分布的样本值
#randint 给定上下限范围随机选取整数
#randn 标准正态
#binomial 二项分布
#normal 正态
#beta beta分布
#chisquare 卡方
#gamma 伽马分布
#uniform [0,1)均匀分布
示例:随机漫步
#纯python
import random
position=0
walk=[position]
steps=10000
for i in range(steps):step=1 if rand.randint(0,1) else -1position+=stepwalk.append(position)
plt.plot(walk[:100])#numpy库
nsteps=10000
draws=np.random.randint(0,2,size=nsteps) #生成10000个随机数
steps=np.where(draws>0,1,-1) #有点像excel的if语句诶
walk=steps.cumsum(steps) #累加的列表
walk.min()
walk.max()
(np.abs(walk)>=10).argmax() #首达时位置 但argmax会对数组完全扫描 不是很高效
#多个随机漫步
nwalks=5000
nsteps=1000
draws=np.random.randint(0,2,size=(nwalks,nsteps))
steps=np.where(draws>0,1,-1) #5000个1000步的随机漫步
walks=steps.cumsum(1) #累加每行
walk.max()
walk.min()
hits30=(np.abs(walks)>=30).any(1) #无论取值 首达时是会存在的
hits30.sum() #总穿越次数
crossing_time=(np.abs(walk[hits])>30).argmax(1)
crossing_time.mean() #但理论上这个均值等于无穷 如果我没记错的话
pandas入门
基本数据结构
import pandas as pd
from pandas import Series, DataFrame
obj=pd.Series([4,5,6,7])
obj.values
obj.index #像字典 自动生成数字索引
obj2=pd.Series([4,5,6,7],index=['a','b','c','d']) #制定索引
obj2.index #数据类型为‘object’
obj2['b']
obj[obj>5]
'b' in obj2
#字典可直接创建Series 根据运算的索引标签自动对齐数据
sdata={'A':35000,'B':71000,'C':16000,'D':5000}
obj3=pd.Series(sdata)
states=['A','B','D','E']
obj4=pd.Series(sdata,index=states) #以index为基础在数据中筛选 数据缺失返回nan
pd.isnull(obj4) #判断缺失数据
pd.notnull(obj4)
obj4.isnull()
obj4.notnull()
#name属性(像表头?)
obj4.name='population'
obj4.index.name='state'
obj4.index=['F','G','H','I'] #索引修改
#DataFrame 表格型数据 有序的列 每列不同的值类型 有行、列索引
#二维结构保存数据但能轻松表示高维数据
data={'state':['A','A','A','B','B','B'],'year':[2000,2001,2002,2001,2002,2003],'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame=pd.DataFrame(data)
frame.head() #前五行
pd.DataFrame(data,columns=['year','state','pop']) #列以制定顺序排列 列找不到会产生缺失值
frame2=pd.DataFrame(data,columns=['year','state','pop','debt'], index=['one','two','three','four','five','six'])
frame2.columns #获取索引(表头)
frame2['state'] #获取一列
frame2.year #只有列名是合理的python变量才适用
frame2.loc['three'] #获取行
frame2['debt']=16.5
frame2['debt']=range(6) #给列复制时需要与长度匹配
val=pd.Series([1,2,3],index=['one','two','three'])
frame2['debt']=val #其余行缺失返回nan
frame2['eastern']=frame2.state=='Onio' #创造新列 (布尔值)不能用.eastern
del frame2['eastern']pop={'A':{2001:2.4,2002:2.9},'B':{2000:1.5,2001:1.7,2002:3.6}} #嵌套字典
frame3=pd.DataFrame(pop) #外层键为列,内层键是行索引
frame3.T #转置
pdata={'A':frame3['A'][:-1],'B':frame3['B'][:2]}
pd.DataFrame(pdata)
#DataFrame能接受的数据:二维ndarray,各种字典,另一个DataFrame
frame3.index.name='year';frame3.columns.name='state'### 索引对象
#轴标签 元数据
obj=pd.Series(range(3),index=['a','b','c'])
index=obj.index
index[1:]
#index[1]='d' 会报错 index对象不可变
#index方法和属性
#append 连接另一个index对象,产生新的index
#difference 计算差集
#intersection 交集
#union 并集
#isin 各值是否包含在参数集合中
#delete 删除i处的
#drop 删除传入的值
#insert 元素插入到i处
#is_monootonic 各元素均大于前一个元素时返回True
#is_unique #没有重复值返回True
#unique 计算唯一值的数组###基本功能
obj=obj.reindex(range(3))
obj2=pd.Series(range(3))
obj2.reindex(range(6),method='ffill') #前向填充
frame3=pd.DataFrame(np.arange(9).reshape((3,3)),index=['a','b','c'],columns=['A','B','C'])
#行列都可以再索引
#reindex的参数 index
#method填充方式 fill_value缺失值替代值 limit前后向最大填充量
#tolerance不准确匹配项的最大间距(绝对值间距) level在multiindex制定级别匹配简单索引
#copy 为True全部复制 False新旧相等不复制
frame3.drop('a')
frame3.drop('A',axis=1) #不会返回新对象#索引同np基本相同
obj3['A'] #用标签切片末端是包含的
obj3[0]
obj3[[1,3]]
obj3[obj3<20000]
frame2[['year','state']] #DataFrame索引是获取列
frame2.loc['two',['year','state']] #loc通过标签函数一行多列
frame2.iloc[2,[3,0,1]] #iloc通过整数进行索引[index,columns] 也可用于切片
frame3.iloc[:,:2][frame3.B>3] #frame2使劲给我报错嘿
frame2.at['two','year'] #[行,列]标签选取单一值
frame2.iat[1,0] #[行,列]数字选取但一值
#get_value set_value 标签选取单一值
ser=pd.Series(np.arange(3.))
#ser[-1]负数索引会报错 轴索引含有整数 数据 选取总会使用标签
ser2=pd.Series(np.arange(3.),index=['a','b','c'])
#ser[-1]会报错 #最好使用loc和iloc
算术运算和数据对齐
obj2+ser #按index相加 否则返回nan
#dataframe同样 只有交集会进行运算``
df1=pd.DataFrame(np.arange(12).reshape((3,4)),columns=list('abcd'))
df2=pd.DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde'))
df1+df2
df1.add(df2,fill_value=0) #nan填充为0
1/df1
df1.rdiv(1) #在函数前加r会反转参数
#sub rsub -
#floordiv,rfloordiv //
#mul rmul *
#pow rpow **
df1.reindex(columns=df2.columns,fill_value=0)
series=df1.iloc[0]
df1-series #dataframe与series之间的运算 会broadcasting 按列进行匹配
series2=df1['b']
df1-series2
df1.sub(series2,axis='index') #按列进行匹配
函数应用和映射
A=pd.DataFrame(np.random.randn(4,3),columns=list('bde'))
np.abs(A)
f=lambda x:x.max()-x.min()
A.apply(f) #apply将函数应用到各行/列组成的一维数组上 各列算了一次
A.apply(f,axis='columns') #各行算一次
def f(x):return pd.Series([x.min(),x.max()],index=['min','max'])
A.apply(f)
format=lambda x:'%.2f'% x
A.applymap(format) #格式化字符串
A['e'].map(format) #series应用于元素级的map方法
排序、排名
B=pd.DataFrame(np.random.randn(4,3),index=[3,2,1,0],columns=list('ebd'))
B.sort_index() #对行排序 默认升序
B.sort_index(axis=1) #对列排序
B.sort_index(axis=1, ascending=False) #降序
B['e'].sort_values() #按值排序 缺失会放在末尾
B.sort_values(by='e') #按某一列来排序 多个则改为列表
obj2.rank() #为各组分配一个平均排名 默认
obj2.rank(method='first') #原始数据出现顺序
#method参数 min max dense
obj2.index.is_unique #index是否唯一 不唯一时选取为series
汇总、计算、描述统计
A.sum() #按列求和
A.sum(axis=1) #按行求和
#参数 skipna 排除缺失值 默认为True; level层次化索引的轴
A.idxmax()
A.idxmin() #返回索引值
#argmax argmin 返回索引位置
A.cumsum()
A.describe() #描述性统计
C=pd.Series(states*4)
C.describe() #文本型描述统计
#quantile分位数 median中位数 mad绝对离差
#sum mean var std skew kurt cummin cummax cumprod
#diff一阶差分 pct_change百分数变化#相关系数 协方差
import pandas_datareader.data as web
all_data={ticker:web.get_data_yahoo(ticker) for ticker in ['AAPL','IBM','MSFT','GOOG']}
price=pd.DataFrame({ticker:data['Adj Close'] for ticker,data in all_data.items()}) #调整收盘价
volume=pd.DataFrame({ticker:data['Volume'] for ticker,data in all_data.items()}) #市值
returns=price.pct_change() #收益率
returns.tail()
returns['MSFT'].corr(returns['IBM']) #相关系数
returns['MSFT'].cov(returns['IBM']) #协方差
returns.corrwith(returns.IBM)
returns.corrwith(volume)
#数据读取 csv、table 就是“\t”分割、clipboard剪贴板、excel、hdf、html、json、sas、sql、stata
df=pd.read_csv('example1.csv')
df=pd.read_table('example1.csv',sep=',')
df=pd.read_csv('example1.csv',header=None)names=['z','x','c','v','b','n','m']
df=pd.read_csv('example1.csv',names=names,index_col='b') #新生成一个list作为表头,并且规定index列df=pd.read_csv('C:\\Users\\pro3\\Desktop\\example1.csv',index_col=['key1','key2']) #是面板有两个indexdf=pd.read_table('example1.txt',sep='\s+') #可以去掉多余符号
df=pd.read_csv('example1.csv',skiprows=[0,2,3]) #去掉其中几行sentinels={'message':['foo','NA'],'key2':'b'}
df=pd.read_csv('C:\\Users\\pro3\\Desktop\\example1.csv',na_values=sentinels) #使得sentinels中某列的某值为空
#逐块读取
pd.options.display.max_rows=10 #只显示10行
pd.read_csv('example1.csv',nrows=5) #控制行数
chunker=pd.read_csv('example1.csv',chunksize=1000)
chunker
tot=pd.Series([])
for piece in chunker:tot=tot.add(piece['key'].value_countss(),fill_value=0)
tot[:10] #没看懂
#导出
df.to_csv('example2.csv')
#读excel
xlsx=pd.ExcelFile('example1.xlsx')
pd.read_excel(xlsx,'sheet1')
frame=pd.read_excel('example1.xlsx','sheet1')
#写excel
writer=pd.ExcelWriter('example2.xlsx')
frame.to_excel(writer,'sheet1')
writer.save()
frame.to_excel('example2.xlsx')
import sys
df.to_csv(sys.stdout,sep='|') #规定间隔是‘|’
df.to_csv(sys.stdout,na_rep='NULL') #缺失值为NULL
df.to_csv(sys.stdout,index=False,header=False)
df.to_csv(sys.stdout,index=False,columns=['d','c','b','a']) #规定列的顺序
#series导出
dates=pd.date_range('1/1/2000',periods=7)
ts=pd.Series(np.arange(7),index=dates)
ts.to_csv('example3.csv') #web APIs交互
import requests
resp=requests.get('url') #读网址 返回json字典
data=resp.json()
issues=pd.DataFrame(data,columns=[])
#读json
obj='''
……
''' #就是json的格式啦
import json
result = json.loads(obj) #转为python形式
asjson=json.dumps(result)data=pd.read_json('example1.json') #自动转为series或者dataframe
#读hdf5
frame=pd.DataFrame({'A':np.random.randn(100)}) #生成一列随机100个
store=pd.HDFStore('mydata.h5')
store['0bj1']=frame #存到上面的文件里
store.put('obj2',frame,format='table') #put相当于 store['obj2']=frame
store.select('obj2',where=['index>=10 and index <= 15'])
frame.to_hdf('mydata.h5','obj3',format='table') #保存?
pd.read_hdf('mydata.h5','obj3',where=['index<5'])#数据库交互
import sqlite3 #mysql是pymssql
query='''
CREATE TABLE test
(a varchar(20)), b varchar(20),
c REAL, d INTEGER
);''' #数据库查询语言记入query 生成abcd四列
con=sqlite3.connect('mydata.sqlite') #这个没看懂
con.execute(query) #执行
con.commit #生成table结束
data=[] #不想敲了
stmt='INSERT INTO test VALUES(?,?,?,?)'
con.executemany(stmt,data) #这个也没看懂 将data写入到test里面
cursor=con.execute('select * from test') #test表里所有数据
rows=cursor.fetchall() #拿出来所有,返回list
cursor.description #返回表头?
pd.DataFrame(rows,columns=[x[0] for x in cursor.description ])
#轻松查数据库
import sqlalchemy as sqla
db=sqla.create_engine('sqlite:///mydata.sqlite') #没看懂
pd.read_sql('select * from test',db)
python学习笔记(Data Analysis)相关推荐
- 2016April Python学习笔记(pandasecharts)
2016April Python学习笔记 Git学习 git(/ɡɪt/,关于这个音频文件 音频(帮助·信息))是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2 ...
- python 学习笔记 12 -- 写一个脚本获取城市天气信息
近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...
- Python学习笔记:Day 12 编写日志列表页
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此, 写下这些 ...
- Python学习笔记:Day11 编写日志创建页
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:Day 10 用户注册和登陆
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:Day5 编写web框架
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:web开发1
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:网络编程
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:第三方模块2
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:常用第三方模块(1)
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
最新文章
- 读入自然数m、n,判断m/n是有限小数还是循环小数
- 基本操作1-本地仓库连接远程仓库
- 二叉树节点为某一值的路径
- Oracle性能优化3-sql优化一定要等价
- 获取PowerShell某个对象的所有命令
- 白鹭发布html5,白鹭Egret Engine 1.5发布 HTML5性能大幅提升
- 使用BoobSnail生成任意Excel 4.0 XLM宏文件
- 专题开发十三:JEECG微云高速开发平台-附录
- 解决ERROR:Local variable count defined in an enclosing scope must be final or effectively final
- 初学java者写家庭收支账本
- Windows Media Player Network Sharing Service 启动失败
- Idea中文件图标发生变化,导致文件显示出现异常
- [苹果开发者账号]03 申请APPID、苹果开发者账号 常见问题整理
- Fine-Gray检验、竞争风险模型、列线图绘制
- 最全的正则表达式大全,手机号、邮箱等等
- 传统分割方法汇总(包括SLIC、Ncut、watershed、graph-based segmentation、Meanshit、最大熵分割)
- yolov1-v3学习报告
- 微信小程序 错误记录
- 计算机桌面刷新位置不可用,电脑桌面打开图片提示位于不可用的位置怎么办
- AI孙燕姿爆火,华语乐坛重温旧梦