Jupyter安装与Python学习建议

这篇教程面向的是从未接触过终端(命令行)的同学(通常是Windows用户),所以我会以Windows平台介绍如何安装Jupyter Notebook(但macOS与Linux也绝对通用啦),并简单介绍它的理念和基础使用。 题外话:为什么要使用Jupyter? 其实这个答案有很多,我认为则是它提供了交互式的(所见即所得)的编程方式,就像曾经的 Microsoft Word 一样(LateX的学习成本就高得多)。对的,它极大地降低了编程的难度,让更多的人能够学习并享受程序的乐趣。(同时它也真的超级适合科研领域) 题外话的题外话:对于大型项目使用Jupyter是一场灾难。 使用Windows系统 前往Python.org选择 Latest Python 3 Release 拉到最底下选择 Windows Installer 下载并安装,这里建议安装到默认的路径即可。 注意!一定要勾选Add Python to PATH选项!!!它会把python和pip添加到PATH中,供你在CMD/PowerShell中使用命令行。 安装完成以后,你可以按下 WIN+R 键,输入 powershell 打开终端,检查python与pip是否正确安装。 如果是macOS或者Linux 安装几乎一样,区别在于终端不再是powershell,而是使用Terminal(相信你们能打得开它)来检查安装是否成功喔! 使用pip来安装Jupyter以及依赖库 检验完成后(现在你已经会使用powershell了),我们再次打开powershell,复制以下命令开始安装Jupyter以及常用的数据分析依赖库,过程会比较慢(取决于网络和你的电脑运行速度)通常会花费2-10分钟不等。 注意!最后要耐心等待安装完成,直到能继续输入命令为止。 pip install jupyter numpy pandas scipy matplotlib seaborn Jupyter Notebook 安装完所有依赖以后,在powershell里输入 jupyter notebook 会自动跳转到浏览器。你可以尝试新建一个 ipynb 文件,并写一些简单的python代码(shift+enter运行单元格)。当你想要关闭的时候,只需要关掉浏览器,同时关闭powershell即可。 注意!观察你在powershell输入 jupyter notebook 这行最前面的路径(比如我这是 C:\Users\qwezarty),这个路径是你之后新建的 ipynb 文件的物理文件夹所在位置,你可以使用Windows的文件管理器打开找到它(可以分享你写的notebook并且发送给别人喔!) 在Jupyter中最重要的概念就是单元格(Cell),它可以是 python code 也可以是 markdown (什么是markdown?看这里:Markdown 是什么?),单元格被编辑后需要使用shift+enter运行以后才会真正执行这个片段,所以单元格不再是像以前的传统程序一样按顺序执行了,而是按照你手动shift+enter的顺序来执行。(每次修改代码都别忘记运行这个单元格后面所有的单元格们哦!)。 我们可以选中一个单元格,按m键来让它转变成一个markdown单元,按y键来让它变回一个code单元。在markdown单元下,我们甚至可以输入Latex的数学公式。 Markdown 语法・简明版 有你需要的所有基础语法和演示。Short Math Guide for LATEX 则是一份很好的快速入门Latex的资料,由美国数学协会编写免费开放给公众(我也收集到了它的中译本,一份简短的LATEX数学指南 翻译如有侵权请告知我会删去)。...

September 30, 2022 · 1 min · Bruce Yip

实验学家的Python工具箱(附常用依赖库自动化安装)

随着深入使用ROOT Data Analysis Framework,也逐渐发现了它的劣势:基于C++写的分析和绘图程序在代码行数增长以后维护成本不断提高、多人协作的成本偏高(尤其是课题组的新成员想融入进来需要花很多的时间)。幸运的是,ROOT项目组还为Python提供了调用接口(PyROOT),配合使用Cppyy来最小程度上嵌入一些C++的代码,以达到易于上手、维护的目的。 Note:也不得不说下Python的劣势,慢!很慢!非常慢!我更推荐那些性能开销型的程序使用C++来编写,或者在Python中使用Cppyy来编写C++并执行。在我的使用场景中,一般是绘图采用Python来做。一个好的判断标准是:当你在Python中编写了某个函数,这个函数的运行时间能否在你盯着它运行结束并且耐心消失殆尽之前就执行完毕(如果不行,请把这个功能使用C++来执行,或者换一种构架思路)。 使用Pyenv来管理Python的版本(and Jupyter) Python最让人诟病的就是版本(还有它的PIP软件包管理),Pyenv允许我们在本机上安装多个不同的Python版本并随时切换,这样能够让我们绕开macOS本机的上古Python2.X(系统部分软件对它有依赖),并且绕开Homebrew安装并不断升级的Python3.X(每次Homebrew自动升级了Python都会导致透过PIP安装的软件包失效,需要重新安装很麻烦)。 以下是macOS的安装方法,注意我使用的终端是zsh,若是bash请参考pyenv github的readme,你可以通过 echo $SHELL 来查看自己用的是什么终端。 brew update brew install pyenv echo 'eval "$(pyenv init --path)"' >> ~/.zprofile 接着需要完全退出终端并重新打开它,测试一下Pyenv是否成功安装,以下是Pyenv的一些简单使用方法: # show help page pyenv -h # show availible python versions pyenv install --list # install specific python version pyenv install 3.9-dev # show installed versions pyenv versions # using specific python version pyenv global 3.9-dev # show which python located pyenv which python 注意!不同的系统和ROOT版本,它预编译好的包使用的Python版本是固定的,你需要使用 root-config –python3-version 来查看并安装相应的dev版本。例如:3....

September 22, 2022 · 3 min · Bruce Yip

使用VSCode或NVim来编写C++(附LXPLUS代码提示配置)

简介 最近C++代码越写越多,也有不少同学问我这种炫酷的C++代码提示是怎么在Mac上实现的。2022年了现在我日常会使用VSCode来作为主力编辑器(包括断点调试和提交Git Commits),NVim则用于终端编辑代码(例如远程连接到CERN的服务器)。我会以MacOS系统为例配置这两种方案,大家根据自己需求,选择其中一种即可,个人推荐VSCode. Sec. 1 VSCode 首先是要安装 C/C++ 拓展,启动VSCode以后在拓展里搜索安装即可。然后让我们找个(或者新建)一个空的文件夹,例如我选择了 ~/Code/clang/playground,使用VSCode打开它。接着新建 .vscode 文件夹,在该文件夹下新建文件 c_cpp_properties.json 文件: { "configurations": [ { "name": "Mac", "includePath": [ "${default}", "${workspaceFolder}" "/usr/local/opt/root/include/root", // change path to your root include path ], "compilerPath": "/usr/bin/g++", "cppStandard": "gnu++17", "intelliSenseMode": "gcc-x64" } ], "version": 4 } 其中 includePath 和 compilerPath 是值得注意的。 当你引用了一些第三方库或者头文件,你都要写到 “includePath” 中,例如在上面的例子我添加了root库的inlude路径(如果你不知道它的路径,可以使用 root-config –incdir 找到)。 你可能需要更改 “compilerPath” ,你可以在终端里输入 which g++ 来看到g++的路径。 现在让我们来测试一下它是否能正常工作,在 playground 文件夹下新建一个 main.cc 文件,你应该能正常使用代码补全与智能提示了(如果不行请返回到上一步,也欢迎通过邮箱联系我!),内容如下: #include <TFile.h> #include <TCanvas....

September 20, 2022 · 4 min · Bruce Yip

SSH使用技巧-免密码/自动代理

Sec.0 引言 如果你刚接触GNU/Linux,那么在连接远端主机的时候一定被这些问题困扰着: 远端主机的IP地址记不住,每次都要掏出小本子看一下,还要多看几眼看看输地对不对 密码过长难以输对,或者密码太过简单容易被碰撞攻击 连接的网络环境复杂,每次要跳转多个堡垒机到达目标 不过幸好,前辈们在设计SSH的时候,就已经帮我们考虑到了这个问题。 Sec.1 通过密钥来避免每次输入密码 什么是非对称加密算法 你生成了两把钥匙:“公共钥匙”和“私人钥匙”。公钥会被广泛地分发给其他任何想要和你通信的人;而私钥则由你自己保管。 “钥匙对”使得通信过程中,不需要传递加密解密“规则” 你把公钥给了信任的人,他们将要发送的数据通过公钥加密 你拿到了这段数据,利用只储存在自己这里的私钥解密 中间数据即使被拦截,在没有唯一私钥的情况下,也没法解开数据包。 那么只要私钥不泄漏,通信就是安全的。 在数学原理上,阮一峰的博文RSA算法原理(一)做了很好的阐述,这里不再展开,有兴趣的同学可以了解一下。 生成钥匙对 # 生成key,但首先你得安装ssh ssh-keygen -t rsa -b 2048 # 一路按回车换行,终端输出大概是这样 # Generating public/private rsa key pair. # Enter file in which to save the key (/home/username/.ssh/id_rsa): # Enter passphrase (empty for no passphrase): # Enter same passphrase again: # Your identification has been saved in /home/username/.ssh/id_rsa. # Your public key has been saved in /home/username/....

October 16, 2020 · 1 min · Bruce Yip

如何在两周内学会C++并构建优质的项目

简介 最近因为科研需要,捡起了好几年前大学水平的C++(不忍直视),毫无意外地忘记地一干二净。于是两周后就有了这篇文章,期望能够帮助所有拥有一定编程基础(至少写过一个完整的项目的那种)的同学入门并掌握这一门编程语言。通过阅读这篇文章,你能够学到: 用优质的资源,快速学习C++的语法构成 指针和防止内存泄漏等,较难的需要实战(编码)的内容 C++标准的现代化目录结构 利用CMake来进行跨平台开发/编译,把开发的软件安装到系统中 利用Catch2来编写单元测试,集成到CMake中去 Doxygen自动化生成API文档 Shell脚本与CMake联动,进一步实现自动化(龟速更新中) 跨系统交叉编译,做成Docker镜像(未来用到了再更) 我的开发平台是"macOS Catalina",选择的IDE是"vscode",编译器采用了"g++",在考虑兼容性和新特性之后,我选择了"c++17"版本进行开发。文中许多的资源,是需要梯子才能够访问的,这点请注意。 快速学习C++语法结构 写出你的 “Hello, world!"(VSCODE配置) 首先,让我们从简单难度开始:在你的本地代码仓库中建立一个文件夹,名字随意,创建一个 hello.cc 文件并保存,内容如下(现在不需要去关心这些内容代表什么): #include <iostream> int main() { std::cout << "hello, world!" << std::endl; return 0; } 打开 terminal 以后,你就可以进行手动编译了: # 编译 g++ hello.cc -o hello.o # 运行 ./hello.o 当然,每次进行这样的手动编译,实在繁琐并且无法进行断点调试。在VSCODE中编写C++项目,首先你要安装一个"C/C++“的扩展,然后打开刚才存放 hello.cc 的目录,双击打开 hello.cc 以后,按住 cmd+shift+p 呼出vscode的命令面板,输入 tasks: 索引到 “Tasks: Configure Task”(如图所示)选择编译器,这里我选择了g++作为编译器,之后你能在.vscode目录下发现自动创建出的 “tasks.json”(当然我们要进行修改) 之后选择左侧的调试按钮,创建一个 “launch.json”,附上我的两个配置文件如下: .vscode/task.json { "version": "2.0.0", "tasks": [ { "type": "shell", "label": "C/C++: g++ build active file", "command": "/usr/bin/g++", "args": [ "-std=c++17", "-g", "${file}", "-o", "${fileDirname}/caches/${fileBasenameNoExtension}....

September 20, 2020 · 5 min · Bruce Yip