Python 调用 C 语言的函数
Python 是一个高级的、解释性的编程语言,其代码比较其他编程语言,如C、C++、Java 等简单,通俗更易懂,开发效率高,但运行效率较弱。其本身是利用C语言(C语言是为了编写Unix操作系统而被开发研究出来)开发的,因此,在Python中调用C函数、代码将是比较自然的。方法很多,这里介绍一个比较简单的方法。在哪些Python代码运行效率低下的地方,调用C语言实现的程序将会加速代码运行。除此之外,加速Python代码的方法还有,利用 numba 的 jit 或 njit 装饰器来加速数学计算比较多或循环比较多的地方。
编写 C 代码打开文本编辑器,敲入如下代码,并命名为 x_maths.c
123456#include <stdio.h>#include <math.h>int square(int i) { return pow(i, 3);}
编译为共享库文件利用C编译器将上面的 x_maths.c 编译为共享库文件(shared library)x_maths.so,也可以写成其他名字,但必须以 .so 为扩展名
1cc -fP ...
机器学习中的数据划分技巧
机器学习中划分数据集的主要目的是为了避免过拟合。
在机器学习领域,为了避免过拟合和模型选择偏差常常划分数据集为三类:
训练集(training set)
验证集(cross-validation set or development set or dev set)
测试集(testing set)
我们尝试在训练集上构建模型,然后在验证集上尽可能优化超参数。最后,在我们的模型准备好后,在测试集上评估我们的模型。
对于机器学习算法研究员,有时候会省略测试集。测试集旨在对算法在现实世界中数据上进行无偏估计,此时,整个数据集分为两部分。将数据集分为两部分的研究员通常将验证集称为测试集。
训练集用于拟合模型的数据样本,即我们用于训练模型的数据集的实际子集(在神经网络的中估算权重和偏差)。该模型从该数据中学习并优化模型参数。
验证集我们通过最小化交叉验证集上的误差来选择适当的模型或多项式的阶数(如果仅使用回归模型)。
测试集用于对训练数据集上的最终模型进行无偏评估的数据样本。仅在使用训练集和验证集对模型进行完全训练之后,才使用它。因此,测试集是一种用于一旦将模型部署在现实场景使用时将遇 ...
牛顿-莱布尼茨公式
牛顿-莱布尼茨公式不仅为定积分提供了一个有效的计算方法,而且是联系不定积分和定积分的桥梁。
定理 9.1 若函数 $f$ 在 $[a, b]$ 上连续,且存在原函数 $F$,即 $F^{\prime}(x) = f(x), x\in[a, b]$,则 $f$ 在 $[a, b]$ 上可积,且$$\int^b_a f(x) \mathrm{d}x = F(b) - F(a).$$上式称为牛顿-莱布尼茨公式,也常写作$$\left. \int_a^b f(x) \mathrm{d}x = F(x) \right\vert_a^b.$$证明(拉格朗日中值定理和定积分定义)由定积分定义,任给 $\varepsilon > 0$,需要证明存在 $\delta > 0$,当 $\left | T \right | < \delta$ 时,有$$\left\vert \sum_{i=1}^n f(\xi_i) \Delta x_i - [F(b) - F(a)] \right\vert < \varepsilon.$$事实上,对于 ...
PyCharm 远程解释器配置
PyCharm 是一款编写 Python 代码的优秀 IDE,特别是其代码提示功能和自动检查代码功能,当我们想要利用远程服务器的强大计算能力和方便的本地 PyCharm 开发工具时,需要配置 PyCharm 远程解释器,下面进行介绍
PyCharm 专业版安装想使用 PyCharm 远程解释器功能,必须使用专业版,JET BRAINS 官网上可以免费使用30天专业版 PyCharm,到期后,可以购买,价格大概时2000元左右。
远程解释器配置顺序如下
File -> Settings -> Project -> Python Interpreter -> 右上角添加 -> SSH Interpreter -> New server configuration -> next -> 配置密码等
上传本地代码配置好远程解释器后,需要将本地新建的工程上传到远程服务器的某一个目录下,才能够运行,不然会出现找不到文件或目录,具体配置如下
Tools -> Deployment -> Configuration -> + -&g ...
Windows 10 Cmake error 解决方法
使用 Windows10 开发 Python 程序时,有时候需要编译安装一些模块,如 dlib 等,需要用到 Cmake 在本地编译安装,但有时候总是会出现
1Error in Cmake “The C compiler identification is unknown”
这时候,主要是因为 Windows10 编译工具未有安装导致的,解决方法就是安装它。
安装 Cmake下载 Cmake,下载地址:https://cmake.org/download/
下载后安装,并配置环境变量
安装 visual studio build tools下载 visual studio build tools,下载地址:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
下载后,安装,可能需要一段时间安装
测试安装 dlib安装完 Cmake 和 visual studio build tools 后,测试编译安装模块
1pip install dlib
Pycharm 自动文件代码注释说明
PyCharm 是一款非常优秀的python代码开发工具,功能强大,特别是代码提示功能,非常好用。在我们开发python代码时,常常需要给代码文件添加说明注释,比如,在什么时候创建的代码、有谁开发、作者信息等等,下面给出一个个人喜好的格式
12345678#!/usr/bin/env python# -*- coding: utf-8 -*-# @Author : Jinzhong Xu# @Contact : jinzhongxu@csu.ac.cn# @Time : ${DATE} ${TIME}# @File : ${NAME}.py# @Software : ${PRODUCT_NAME}
如何在PyCharm中设置呢?
以Windows上为例:
打开PyCharm -> File -> Settings -> Editor -> File and Code Templates -> Python Script
然后添加上面的格式代码
...
定积分定义
导数的逆运算是不定积分,而定积分是某种特殊和式的极限。不定积分与定积分既有联系又有区别。
概念的引出定积分的概念提出是基于:1、曲边梯形的面积;2、变力所做的功。总体思想是:分割,近似求和,取极限。
定积分的定义定义 设闭区间 $[a, b]$ 上有 $n-1$ 个点,依次为$$a = x_0 < x_1 < x_2 < \cdots < x_{n-1} < x_n = b,$$它们把 $[a, b]$ 分成 $n$ 个小区间 $\Delta_i = [x_{i-1}, x_i], i=1,2,\cdots,n$. 这些分点或这些闭区间构成对 $[a,b]$ 的一个分割,记为$$T = {x_0, x_1, \cdots, x_n} 或 {\Delta_1, \Delta_2, \cdots, \Delta_n}.$$小区间 $\Delta_i$ 的长度为 $\Delta x_i = x_i - x_{i-1},$ 并记$$|T| = \max_{1\leq i \leq n} {\ ...
牛顿方法求解方程根
牛顿法求极小值和方程根
牛顿法求解函数的极小值,用二阶泰勒展开近似目标函数:$$f(x) \approx f(x_0) + f^{\prime}(x_0)(x - x_0) + \frac{1}{2} f^{\prime\prime}(x_0)(x - x_0)^2 \triangleq g(x)$$要求原函数 $f(x)$ 的极小值,可以用求近似函数 $g(x)$ 的极小值来近似。因为 $g(x)$ 是关于 $x$ 的二次函数,所以令 $ g(x) = 0$ 求极小值点:$$f^{\prime}(x_0) + f^{\prime\prime}(x_0)(x - x_0) = 0$$即$$x = x_0 - \frac{f^{\prime}(x_0)}{f^{\prime\prime}(x_0)}$$得到迭代公式:$$x_n = x_{n - 1} - \frac{f^{\prime}(x_{n - 1})}{f^{\prime\prime}(x_{n - 1})}$$对此公式的解释:
求解函数 $f(x)$ 的极小值,相当于求解导函数 $f ...
方向导数和梯度
方向导数 $D_{\boldsymbol{l}}f(\boldsymbol{x})$ 一般是对多元函数而言的,表示函数 $f(\boldsymbol{x})$ 沿着某一方向 $\boldsymbol{l}$ 在点 $\boldsymbol{x}$ 的导数。方向导数的大小表示函数沿着该方向 $\boldsymbol{l}$ 在点 $\boldsymbol{x}$ 的函数值的变化率。对于多元函数有无穷多个方向,但只有一个方向是使得函数在点 $\boldsymbol{x}$ 的变化率(增长率)最大,那就是梯度方向 $\nabla f$ (其中,$\nabla$ 表示 nabla symbol),有时也用记号 grad $f(\boldsymbol{x})$ 表示函数 $f(\boldsymbol{x})$ 在点 $\boldsymbol{x}$ 的梯度(gradient)向量。那为什么变化率最大的方向是梯度方向呢?下面给出解释,不是一般性,假设 $\boldsymbol{x} = (x, y)$ ,记这里假设是 $f(\boldsymbol{x})$ 二元函数。
方向导数方向 ...
WSL 开启 SSH
Windows10 安装Linux子系统后,如何开启SSH服务,使得远程可以连接该WSL呢?下面介绍这一过程。
Windows10 打开22端口
Windows键 + r 打开运行,输入 control,回车打开控制面板
找到“系统和安全”,注意右上角查看方式为“类别”,点进去找到防火墙。或者直接改变查看方式为“大图标”,找到防火墙
进入防火墙,找到左边的“高级设置”
找到左上角的“入站规则”,点击进入,找到右上角的新建规则,选端口,然后输入需要打开的端口,这里是22,然后是运行连接,最后,填写名称SSH
出站规则同样
WSL 安装SSH服务1sudo apt install openssh-server openssh-client
开启sshd
1234567891011121314151617181920212223242526272829303132333435363738394041sudo /etc/init.d/ssh restart# 如果出现如下内容,说明没有开启成功,需要生成相应的密钥$ sudo /etc/init.d/ssh restartCould ...
Python 程序编译成 exe 可执行文件
Python 是一种解释型语言,编写的程序只能通过解释器来执行,对于一些想要隐藏源代码或者只想在 Windows, Linux, Mac 上通过鼠标双击直接运行程序的同学,直接给 .py 文件不是一个好的解决方法,下面解释两个软件来方便把python 文件转化为 exe 等程序。
pyinstallerpyinstaller 可以在 Windows, Linux, Mac 等平台上使用。
安装
1pip install pyinstaller
使用(进入主程序文件夹)
1234567891011121314151617181920212223242526cd C:\Users\xujin\Downloads\Tetris# 打包程序,tetris.py 为整个工程的程序入口,类似于 main# 打包成一个文件夹,包含很多文件和文件夹;-D, --onedir 为默认选项pyinstaller tetris.pypyinstaller tetris.py -D # 默认打包到 dist 目录下,可使用如下方法改变目录名为 DIRpyinstaller tetris.py --dis ...