CONTENT
- 1. 小Tips
- 三元运算符
- 平均数 np.mean()
- range() 与 np.arange()
- 求最大/小值及索引值
- 合并 list 为字符串
- 剪切板模块 pyperclip
- 将秒数转化为小时分钟秒
- 2. 数学
-
- 3. 文件相关
- 按分隔文件路径名的字符串来分割
- 数据的保存和读取
- 检查文件夹是否存在,不存在则创建
- 判断文件是否存在
- 遍历文件夹中所有最里面的子文件夹中的文件
- 遍历文件夹中的所有文件
- 获取当前文件名
- 4. matplotlib 画图
- x轴标签旋转
- 设置坐标刻度值的大小以及刻度值的字体
- 设置横纵坐标的名称以及对应字体格式
- 设置输出的图片大小
- 5. sklearn
-
- 6. opencv
- 1. cv2.putText 文字换行('\n')无法解析换行
- 7. list, numpy.ndarray, torch.Tensor 格式相互转化
1. 小Tips
三元运算符
类似C语言的条件运算符?:
语法:
c = a if a>b else b //如果a>b返回a,否则返回b
平均数 np.mean()
>>> a = np.array([[1, 2], [3, 4]])
>>> np.mean(a)
2.5
>>> np.mean(a, axis=0)
array([ 2., 3.])
>>> np.mean(a, axis=1)
array([ 1.5, 3.5])
range() 与 np.arange()
-
range()返回的是range object,而np.arange()返回的是numpy.ndarray(type(np.arange(10)) == np.ndarray)
- 两者都是均匀地(evenly)等分区间;
- range尽可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向量使用。
-
range()不支持步长为小数,np.arange()支持步长为小数
-
两者都可用于迭代
-
两者都有三个参数,以第一个参数为起点,第三个参数为步长,截止到第二个参数之前的不包括第二个参数的数据序列
某种意义上,和STL中由迭代器组成的区间是一样的,即左闭右开的区间。[first, last)或者不加严谨地写作[first:step:last)
>>>range(1,5)
range(1,5)
>>>tuple(range(1, 5))
(1, 2, 3, 4)
>>>list(range(1, 5))
[1, 2, 3, 4]
>>>r = range(1, 5)
>>>type(r)
<class 'range'>
>>>for i in range(1, 5):
... print(i)
1
2
3
4
>>> np.arange(1, 5)
array([1, 2, 3, 4])
>>>range(1, 5, .1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer
>>>np.arange(1, 5, .5)
array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
>>>range(1, 5, 2)
>>>for i in range(1, 5, 2):
... print(i)
1
3
>>for i in np.arange(1, 5):
... print(i)
1
2
3
4
求最大/小值及索引值
- 列表
list = [9, 12, 88, 14, 25]
max_list = max(list)
max_index = list.index(max(list))
- numpy
(可适合处理numpy.ndarray对象,可选的参数是axis=0或者1)
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array((5, 6, 7, 8))
c = np.array([[11, 2, 8, 4], [4, 52, 6, 17], [2, 8, 9, 100]])
print(a)
print(b)
print(c)
print(np.argmin(c))
print(np.argmin(c, axis=0))
print(np.argmin(c, axis=1))
合并 list 为字符串
>>> seq = ('b','o','o','k')
>>> print('_'.join(seq))
>>> b_o_o_k
剪切板模块 pyperclip
pyperclip模块不是自带的需要安装
pyperclip.copy(text) 把text字符串中的字符复制到剪切板
text = pyperclip.paste() 把剪切板上的字符串复制到text
将秒数转化为小时分钟秒
seconds =35400
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
print("%d:%02d:%02d" % (h, m, s))
2. 数学
随机数
import random
print( random.randint(1,10) )
print( random.random() )
print( random.uniform(1.1,5.4) )
print( random.choice('tomorrow') )
print( random.randrange(1,100,2) )
a=[1,3,5,6,7]
random.shuffle(a)
print(a)
3. 文件相关
按分隔文件路径名的字符串来分割
root.split(os.sep)
数据的保存和读取
- .mat 格式,Matlab 也可以使用
保存: scipy.io.savemat()
读取: scipy.io.loadmat()
import scipy.io as scio
data = scio.loadmat('ex3data1.mat')
X = data['X']
Y = data['y']
scio.savemat("weights.mat", {'weights': self.weights})
- .npy 格式,numpy
保存: numpy.save()
读取: numpy.load()
import numpy as np
a = np.mat('1,2,3;4,5,6')
np.save('a.npy',a)
data_a = np.load('a.npy')
检查文件夹是否存在,不存在则创建
if not os.path.exists(save_path):
os.makedirs(save_path)
判断文件是否存在
if not os.path.isfile(Ground_Truth_file):
get_Ground_Truth()
遍历文件夹中所有最里面的子文件夹中的文件
目录中所有 不包含子文件夹 的 文件夹 中的文件
for root, sub_dir, files in os.walk(root_path):
if sub_dir != []:
continue
for file in files:
img = imread(os.path.join(root, file), as_gray=True)
遍历文件夹中的所有文件
pos_img_files = os.listdir(pos_img_path)
for file in pos_img_files:
img = imread(pos_img_path+file)
获取当前文件名
Python获取当前文件名可以通过__file__或者sys.argv[0],下面以test.py文件为例.
import sys
import os
print(__file__)
print(sys.argv[0])
print(os.path.basename(__file__))
print(os.path.basename(sys.argv[0]))
输出:
E:/Code/python3/EffectivePython/test.py
E:/Code/python3/EffectivePython/test.py
test.py
test.py
__file__和sys.argv[0]都是当前文件的绝对路径,可以通过os.path.basename获得文件名。
4. matplotlib 画图
x轴标签旋转
plt.xticks(rotation=45)
设置坐标刻度值的大小以及刻度值的字体
plt.tick_params(labelsize=15)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
设置横纵坐标的名称以及对应字体格式
font = {'family': 'Times New Roman',
'weight': 'normal',
'size': 15,}
plt.xlabel('Value of C for LinearSVC', font)
设置输出的图片大小
figure, ax = plt.subplots(figsize=(12, 5))
5. sklearn
保存模型及参数
- pickle方法(python自带)
from sklearn import svm
from sklearn import datasets
clf = svm.SVC()
iris = datasets.load_iris()
X,y = iris.data, iris.target clf.fit(X,y)
import pickle with open('save/clf.pickle','wb') as f:
clf.pickle pickle.dump(clf,f)
import pickle iris = datasets.load_iris()
X,y = iris.data, iris.target
with open('save/clf.pickle','rb') as f:
clf_load = pickle.load(f)
print(clf_load.predict(X[0:5]))
- joblib方法(sklearn自带)
from sklearn.externals import joblib
joblib.dump(best_lin_svm_clf, 'save/clf.pkl', compress=3)
che_clf = joblib.load('save/clf.pkl')
k 折交叉验证
比如将数据集分为10折,做一次交叉验证,实际上它是计算了十次,将每一折都当做一次测试集,其余九折当做训练集,这样循环十次。通过传入的模型,训练十次,最后将十次结果求平均值。将每个数据集都算一次
交叉验证优点:
1:交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。
2:还可以从有限的数据中获取尽可能多的有效信息。
我们如何利用它来选择参数呢?
我们可以给它加上循环,通过循环不断的改变参数,再利用交叉验证来评估不同参数模型的能力。最终选择能力最优的模型。
下面通过一个简单的实例来说明:(iris鸢尾花)
from sklearn import datasets
from sklearn.model_selection import train_test_split,cross_val_score
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
iris = datasets.load_iris()
X = iris.data
y = iris.target
train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=1/3,random_state=3)
k_range = range(1,31)
cv_scores = []
for n in k_range:
knn = KNeighborsClassifier(n)
scores = cross_val_score(knn,train_X,train_y,cv=10,scoring='accuracy')
cv_scores.append(scores.mean())
plt.plot(k_range,cv_scores)
plt.xlabel('K')
plt.ylabel('Accuracy')
plt.show()
best_knn = KNeighborsClassifier(n_neighbors=3)
best_knn.fit(train_X,train_y)
print(best_knn.score(test_X,test_y))
6. opencv
1. cv2.putText 文字换行(’\n’)无法解析换行
cv2.putText 在向图像中添加文本信息时,如果在待添加的文本中含有换行转义符,一般它是无法正确处理的:
cv2.putText(img, "This is \n some text", (50,50), cv2.FONT_HERSHEY_SIMPLEX, .6, (0, 255, 0), 1, 2)
一种解决方案如下:
img = cv2.imread('boat.png')
text = "FPS: " + str(curr_fps) + "\nperson: " + str(person_num)
y0, dy = 15, 20
for i, txt in enumerate(text.split('\n')):
y = y0 + i * dy
cv2.putText(img, text=txt, org=(3, y), fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=0.50, color=(255, 0, 0), thickness=2)
cv2.imshow('img', img)
cv2.waitKey(0)
7. list, numpy.ndarray, torch.Tensor 格式相互转化
- list 转 numpy
ndarray = np.array(list)
- numpy 转 list
list = ndarray.tolist()
- list 转 torch.Tensor
tensor=torch.Tensor(list)
- torch.Tensor 转 list(先转numpy,后转list)
list = tensor.numpy().tolist()
- torch.Tensor 转 numpy
ndarray = tensor.numpy()
ndarray = tensor.cpu().numpy()
- numpy 转 torch.Tensor
tensor = torch.from_numpy(ndarray)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)