【python】Notebook

2023-05-16

CONTENT

    • 1. 小Tips
      • 三元运算符
      • 平均数 np.mean()
      • range() 与 np.arange()
      • 求最大/小值及索引值
      • 合并 list 为字符串
      • 剪切板模块 pyperclip
      • 将秒数转化为小时分钟秒
    • 2. 数学
      • 随机数
    • 3. 文件相关
      • 按分隔文件路径名的字符串来分割
      • 数据的保存和读取
      • 检查文件夹是否存在,不存在则创建
      • 判断文件是否存在
      • 遍历文件夹中所有最里面的子文件夹中的文件
      • 遍历文件夹中的所有文件
      • 获取当前文件名
    • 4. matplotlib 画图
      • x轴标签旋转
      • 设置坐标刻度值的大小以及刻度值的字体
      • 设置横纵坐标的名称以及对应字体格式
      • 设置输出的图片大小
    • 5. sklearn
      • 保存模型及参数
      • k 折交叉验证
    • 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) # 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

求最大/小值及索引值

  1. 列表
list = [9, 12, 88, 14, 25]
max_list =  max(list) # 返回最大值
max_index = list.index(max(list))# 最大值的索引
  1. numpy
  • min/max是python内置的函数

  • np.argmin/np.argmax是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) )        # 产生 1 到 10 的一个整数型随机数  
print( random.random() )             # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) )     # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') )   # 从序列中随机选取一个元素
print( random.randrange(1,100,2) )   # 生成从1到100的间隔为2的随机整数

a=[1,3,5,6,7]                # 将序列a中的元素顺序打乱
random.shuffle(a)
print(a)

3. 文件相关

按分隔文件路径名的字符串来分割

root.split(os.sep)

数据的保存和读取

  1. .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})
  1. .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):
    # only want to read files
    if sub_dir != []:  # Go to the bottom of the directory without folder
        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文件为例.

# -*- coding: utf-8 -*-
# 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

保存模型及参数

  1. pickle方法(python自带)
from sklearn import svm #引入支持向量机 
from sklearn import datasets    #引入数据集  
clf = svm.SVC() #使用SVC进行分类 
iris = datasets.load_iris() 
X,y = iris.data, iris.target clf.fit(X,y)  #第一种方法,用python自带的pickle库 
import pickle with open('save/clf.pickle','wb') as f: #以写的形式设置一个文件: 
clf.pickle  pickle.dump(clf,f)      #将clf这个训练好的模型 存储在变量f中,且保存


#导出模型并预测值: 
import pickle iris = datasets.load_iris() 
X,y = iris.data, iris.target  
with open('save/clf.pickle','rb') as f: 
                 #以读取的方式 读取模型存储的pickle文件,并放在变量f里  
clf_load = pickle.load(f)           #将模型存储在变量clf_load中  
print(clf_load.predict(X[0:5]))     #调用并预测0-5的结果
  1. joblib方法(sklearn自带)
from sklearn.externals import joblib
#保存
joblib.dump(best_lin_svm_clf, 'save/clf.pkl', compress=3)  # 保存训练好的clf模型 compress读取速度
#读取
che_clf = joblib.load('save/clf.pkl')  # 读取训练好的clf模型

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  #一个简单的模型,只有K一个参数,类似K-means
import matplotlib.pyplot as plt
iris = datasets.load_iris()		#加载sklearn自带的数据集
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)	#这里划分数据以1/3的来划分 训练集训练结果 测试集测试结果
k_range = range(1,31)
cv_scores = []		#用来放每个模型的结果值
for n in k_range:
    knn = KNeighborsClassifier(n)   #knn模型,这里一个超参数可以做预测,当多个超参数时需要使用另一种方法GridSearchCV
    scores = cross_val_score(knn,train_X,train_y,cv=10,scoring='accuracy')  #cv:选择每次测试折数  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)	# 选择最优的K=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, txt, (50, y), cv2.FONT_HERSHEY_SIMPLEX, .6, (0, 255, 0), 1, 2)
    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 格式相互转化

  1. list 转 numpy
ndarray = np.array(list)
  1. numpy 转 list
list = ndarray.tolist()
  1. list 转 torch.Tensor
tensor=torch.Tensor(list)
  1. torch.Tensor 转 list(先转numpy,后转list)
list = tensor.numpy().tolist()
  1. torch.Tensor 转 numpy
ndarray = tensor.numpy()
# *gpu上的tensor不能直接转为numpy
ndarray = tensor.cpu().numpy()
  1. numpy 转 torch.Tensor
tensor = torch.from_numpy(ndarray) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【python】Notebook 的相关文章

  • 如何并排绘制具有相同 X 坐标的条形图(“闪避”)

    import matplotlib pyplot as plt gridnumber range 1 4 b1 plt bar gridnumber 0 2 0 3 0 1 width 0 4 label Bar 1 align cente
  • celery任务eta已关闭,使用rabbitmq

    我使用教程中的默认设置和在 ubuntu 上运行的rabbitmq 使 Celery 任务正常进行 当我毫不延迟地安排任务时 一切都很好 但是当我给他们一个预计时间时 他们会被安排在未来 就好像我的时钟在某个地方关闭了一样 下面是一些请求任
  • 在 SQLAlchemy 中,过滤器是在连接之前还是之后应用?

    使用 SQLAlchemy 我执行如下查询 import models as m import sqlalchemy as sa s session maker q s query m ShareCount m Article join m
  • 学习Python中的解析器

    我记得我读过有关解析器的内容 您只需提供一些示例行 它就知道如何解析某些文本 它只是确定两条线之间的差异 以了解可变部分是什么 我以为它是用 python 写的 但我不确定 有谁知道那是什么图书馆吗 可能你的意思是模板制作器 http co
  • caffe安装:opencv libpng16.so.16链接问题

    我正在尝试在 Ubuntu 14 04 机器上使用 python 接口编译 caffe 我已经安装了 Anaconda 和 opencvconda install opencv 我还安装了咖啡中规定的所有要求 并更改了注释块makefile
  • 如何在Python + Selenium中获取元素的值

    我在我的 Python 3 6 3 代码中得到了这个 HTML 元素 作为 Selenium网页元素当然 span class ocenaCzastkowa masterTooltip style color 000000 alt 5 sp
  • 删除 tkinter 文本默认绑定

    我正在制作一个简单的 tkinter 文本编辑器 但我想要所有默认绑定文本小部件如果可能的话删除 例如当我按Ctrl i它默认插入一个制表符 我制作了一个事件绑定来打印文本框中有多少行 我将事件绑定设置为Ctrl i以及 当我运行它时 它会
  • 我可以同时打开两个 Tkinter Windows 吗?

    可以同时打开2个窗口吗 import tkinter as Tk import random import math root Tk Tk canvas Tk Canvas root background image Tk PhotoIma
  • 无法使用Python请求会话模块登录网站

    我刚刚开始进行网络抓取 对于我的第一个项目 我尝试使用 requests Session 登录 artofproblemsolving com 并访问另一个用户的帐户 这是我的代码 import requests LOGIN URL htt
  • 如何在Python中手动对数字列表进行排序?

    规格 Ubuntu 13 04 Python 3 3 1 背景 Python的初学者 遇到了这个 手动排序 问题 我被要求做的事情 让用户输入 3 个数值并将它们存储在 3 个不同的变量中 不使用列表或排序算法 手动将这 3 个数字从小到大
  • 如何在 python 中使用交叉验证执行 GridSearchCV

    我正在执行超参数调整RandomForest如下使用GridSearchCV X np array df features all features y np array df gold standard labels x train x
  • 提高光线追踪命中功能的性能

    我有一个简单的 python 光线追踪器 渲染 200x200 的图像需要 4 分钟 这对于我的口味来说绝对是太多了 我想改善这种情况 几点 我为每个像素发射多条光线 以提供抗锯齿功能 每个像素总共发射 16 条光线 200x200x16
  • 使用 Python-VLC 的 PyInstaller:无属性“media_player_new”错误

    我使用 Python VLC 创建视频播放器 并使用 PyInstaller 在 Windows 10 计算机上生成可执行文件 最初 它给了我错误 Import Error Failed to load dynlib dll libvlc
  • Pygame:有人可以帮我实现双跳吗?

    我知道已经有其他关于此问题的帖子了 但我的运动系统与我发现的有点不同 所以随后我问这个问题 我的运动系统基于一个名为的命名元组Move up left right down 然后就是这个 def update self move block
  • 为什么我无法杀死 k8s pod 中的 python 进程?

    我试图杀死一个 python 进程 ps aux grep python root 1 12 6 2 1 2234740 1332316 Ssl 20 04 19 36 usr bin python3 batch run py root 4
  • 如何将 django ModelForm 字段显示为不可编辑

    接受我的初步教训django ModelForm 我想让用户能够编辑博客中的条目 BlogEntry has a date postedTime title and content 我想向用户展示一个编辑表单 其中显示所有这些字段 但仅包含
  • python 中的 F 字符串前缀给出语法错误[重复]

    这个问题在这里已经有答案了 我有一个名为 method 的变量 它的值是 POST 但是当我尝试运行时print f method method is used 它不断在最后一个双引号处给出语法错误 我找不到它这样做的原因 我正在使用 py
  • 本地主机上的 Google App Engine GQL 查询

    我正在 Google App Engine Windows 上的 SDK 版本 1 7 0 上开发一个应用程序 我需要经常测试该应用程序 并且此测试涉及数据存储上的大量 GQL 查询 您可以在 App Engine 管理界面的浏览器中在线运
  • 如何仅读取 CSV 文件每行的第一列 [重复]

    这个问题在这里已经有答案了 如何在Python中读取CSV文件每行的第一列 我的数据是这样的 1 abc 2 bcd 3 cde 我只需要循环第一列的值 另外 当我在 calc 中打开 csv 文件时 每行中的数据都在同一个单元格中 这正常
  • 美丽的汤刮 - 登录凭据不起作用

    尝试使用登录凭据抓取页面 payload email gmail com password urls login url https www spotrac com signin url https www spotrac com nba

随机推荐

  • 次短路

    次短路 概念 xff1a 次短路是相对于最短路的 xff0c 简单来说就是第二短的路径 方法 xff1a d i j k s t r
  • 2017icpc沈阳站_M_HDU-6229_(思维)

    链接 xff1a http acm hdu edu cn showproblem php pid 61 6229 题意 xff1a 给一个矩阵上面有一些坏点 xff0c 坏点不能走 xff0c 起点是 0 0
  • CSP认证 201803-3 URL映射

    CSP认证 201803 3 URL映射 链接 xff1a http 118 190 20 162 view page gpid 61 T71 题意 xff1a 从简条件下的 U R L 映 射 URL映射
  • 2017icpc沈阳站_M_HDU-6229_(思维)

    链接 xff1a http acm hdu edu cn showproblem php pid 61 6229 题意 xff1a 给一个矩阵上面有一些坏点 xff0c 坏点不能走 xff0c 起点是 0 0
  • 【Java】程序设计竞赛(Java 方向)

    目录 1 头文件2 输入3 输出4 大数计算5 进制转换6 字符串7 排序8 优先队列9 二分10 Map11 Set 1 头文件 span class token keyword import span java span class t
  • HDU_3089_约瑟夫环快速递推

    HDU 3089 约瑟夫环快速递推 链接 xff1a http acm hdu edu cn showproblem php pid 61 3089 题意 xff1a 约瑟夫环问题 给出 n n n 个人 xff0c 从 1
  • 【ACM】编程笔记

    1 编译错误1 Windows下GCC编译环境中文乱码2 Java中编译错误 编码GBK的不可映射字符 2 JavaJava中 String 和 Integer 的相互转换 3 C C 43 43 C 43 43 中 int 和 strin
  • RSA 算法流程及证明

    RSA 算法流程及证明 需要的前置知识 xff1a 欧拉函数 xff0c 欧拉定理 xff0c 费马小定理 xff0c 同余式乘法性质 xff0c 互质数判断 算法描述算法流程RSA 算法证明RSA 算法 C 43 43 实现参考资料 算法
  • ftp上传不成功,提示 200 227 501 错误

    solve xff1a 检查文件名是不是中文字符 xff0c 若是 xff0c 请换成英文文件名 origin xff1a https www cnblogs com mubin p 3528353 html
  • 【WIN10】添加全局快捷键

    WIN10 添加全局快捷键 打开控制面板 点击管理工具 将 设置好快捷键 的 快捷方式 复制 移动 进 管理工具文件夹 重启 xff0c 一定要重启 xff0c 加张图片告诉你 重启
  • 如何解析DICOM文件中的Pixel Data ?

    DICOM文件可以大致分为两部分 xff1a 一部分 xff1a 与图像相关的元信息 xff0c 包括患者信息 xff0c 检查信息 xff0c 序列信息 xff0c 图像信息等等 另一部分 xff1a 图像的像素数据 在解析DICOM文件
  • 【ARM】ADS1.2 破解版安装后无法运行

    ADS1 2 安装文件 https pan baidu com s 1g0AU kxxs pqsn Lgs8evA 提取码 xff1a 5c6h WIN10 安装 ADS1 2 可能会遇到一堆兼容性bug 我的解决方法如下 xff08 不完
  • 【ARM】微处理器工作模式

    收获 SPACE 和 DCD 的区别在于 xff1a SPACE 申请一片内存空间 以字节为单位申请 xff0c 但不赋初值 DCD 申请一个字 32bit 的内存空间 xff0c 并赋初值 对于 32 位的 ARM xff0c 一个字为
  • 【MAC】添加软连接 将 sublime 放入命令行中

    软链接 类似于 Windows 的快捷方式加环境变量 将 Sublime Text 以 subl 作为新的名字进行全局软连接 span class token function sudo span span class token func
  • 【ARM】 《C 语言调用汇编子程序》 与 《汇编调用 C 语言程序》

    题目 xff1a 实现计算 1 43 2 43 3 43 43
  • 【MAC】启动 ssh 服务 及 ssh 长时间不用自动断开解决

    一 启动 ssh 服务 mac本身安装了ssh服务 xff0c 默认情况下不会开机自启 启动sshd服务 xff1a span class token function sudo span launchctl load w System L
  • 【Linux】ssh 链接服务器 并 安装宝塔面板

    一 ssh 链接服务器 xx 是连接 ssh 的端口号 xx xx xx xx 是 IP 号 span class token function ssh span p xx root 64 xx xx xx xx 二 安装宝塔面板 yum
  • 【Linux】解决 SS 在安装宝塔面板后无法连接服务器问题

    问题 xff1a 在安装宝塔面板后 ss 无法使用 xff0c 但是 ssh 可以连接服务器 原因 xff1a 因为宝塔面板的安全设置默认会禁止除 ssh 端口外的所有端口 解决 xff1a 找到宝塔面板里的安全将 ss 的 server
  • 【SSH】解决 WIN10 通过 ssh 连接 Mac 中文乱码

    问题 xff1a MacOSX 下默认的是 utf 8 字符集 xff0c WIN10 通过 ssh 连接后显示是 utf 8 xff0c 但是中文乱码 原因 xff1a 这种情况一般是终端和服务器的字符集不匹配 在 Mac 终端中输入 l
  • 【python】Notebook

    CONTENT 1 小Tips三元运算符平均数 np mean range 与 np arange 求最大 小值及索引值合并 list 为字符串剪切板模块 pyperclip将秒数转化为小时分钟秒 2 数学随机数 3 文件相关按分隔文件路径