Shell数组获取长度
bash 支持一维数组(不支持多维数组),并且没有限定数组的大小。类似 C 语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0.
获取数组长度的标准方法
数组的个数称为数组长度,获取数组长度的标准方法为:
1 | length=${#array_name[@]} # 取得数组元素的个数 |
bash 支持一维数组(不支持多维数组),并且没有限定数组的大小。类似 C 语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0.
数组的个数称为数组长度,获取数组长度的标准方法为:
1 | length=${#array_name[@]} # 取得数组元素的个数 |
在 Shell 脚本中经常需要添加前缀和后缀,如果使用循环的方式自然可以,但是从效率和规范上讲都不是最佳方式。本文记录标准添加前缀和后缀的方法。2024年12月14日星期六晴北京市
1 | PREFIX="rajiv" |
PREFIX
.tr -d
去除字符/
.services
的所有追加前缀$PREFIX-
.services
的所有追加前缀-$PREFIX
.services[@]
表示数组的所有元素,也可以用services[*]
表示.在数学物理学中,格拉斯曼数(又称反交换数)是一种用于狄拉克场路径积分表示的数学架构。格拉斯曼数是以德国学者赫尔曼·格拉斯曼命名的。取任意两个格拉斯曼代数\(\theta\)和\(\eta\), 则它们之间成反交换关系,即 \[\begin{equation} \theta\eta=-\eta\theta \label{eq:grassmann0} \end{equation}\] 同时格拉斯曼变量与一般的数\(x\)则为交换关系,即 \[\begin{equation} \theta x=x\theta \label{eq:grassmann1} \end{equation}\]
由于\(\theta^2=-\theta^2\), 所以有\(\theta^2=0\), 于是任意函数\(f(\theta)\)泰勒展开为 \[\begin{equation} f(\theta)=A+B\theta \label{eq:grassmann2} \end{equation}\] 既然函数\(f(\theta)\)是任意的,所以对于一个周期函数也必然成立,即 \[\begin{equation} \int f(\theta)d{\theta}=\int f(\theta+T)d{\theta} \label{eq:grassmann3} \end{equation}\] 把式\(\eqref{eq:grassmann2}\)代入到式\(\eqref{eq:grassmann3}\)可得 \[\begin{equation} \int A+B\theta d{\theta}=\int A+B\theta d{\theta}+BT\int 1 d{\theta} \label{eq:grassmann4} \end{equation}\] 由于对于任意的周期函数都成立,所以必然有 \[\begin{equation} \int 1d{\theta}=0 \label{eq:grassmann5} \end{equation}\] 对式\(\eqref{eq:grassmann2}\)积分得 \[\begin{equation} \int f(\theta)d{\theta}=B\int \theta d{\theta} \label{eq:grassmann6} \end{equation}\] 式\(\eqref{eq:grassmann6}\)中的积分不能对所有函数都是零,所认定义对\(\theta\)的积分为\(1\), 即 \[\begin{equation} \int \theta d{\theta}=1 \label{eq:grassmann7} \end{equation}\]
\(SU_n(q)\)群,是指“The special unitary group”, 翻译成中文就是“特殊幺正群”。 同理\(SO_n(q)\)群,是指"The special orthogonal group", 翻译成中文就是“特殊正交群”。酉矩阵(unitary matrix)也叫幺正矩阵, 对它取复共轭再转置则等于逆矩阵,也即是幺正矩阵的转置共轭等于它的逆。当矩阵元为实数时也叫正交矩阵(orthogonal matrix),它的共轭就是它自己,所以转置即得到逆矩阵,这也就表现为矩阵的行向量间为正交关系,列向量间也为正交关系。
The special unitary group \(SU_n(q)\) is the set of \(n×n\) unitary matrices with determinant \(+1\) (having \(n^2-1\) independent parameters). SU(2) is homeomorphic with the orthogonal group \(O_3^+(2)\). It is also called the unitary unimodular group and is a Lie group.
Special unitary groups can be represented by matrices
\[\begin{equation}\label{eq:sug0} \begin{bmatrix} a & b \\ -\overline{b} & \overline{a} \end{bmatrix} \end{equation}\]
where \(\overline{a}a+\overline{b}b=1\) and \(a,b\) are the Cayley-Klein parameters. The special unitary group may also be represented by matrices
\[\begin{equation}\label{eq:sug1} U(\xi,\eta,\zeta)= \begin{bmatrix} e^{i\xi}\cos\eta & e^{i\zeta}\sin\eta \\ -e^{-i\zeta}\sin\eta & e^{0i\xi}\cos\eta \end{bmatrix} \end{equation}\]
or the matrices
\[\begin{equation}\label{eq:sug2} U_x(\frac{1}{2}\phi)= \begin{bmatrix} \cos(\frac{1}{2}\phi) & i\sin(\frac{1}{2}\phi) \\ i\sin(\frac{1}{2}\phi) & \cos(\frac{1}{2}\phi) \end{bmatrix} \end{equation}\]
\[\begin{equation}\label{eq:sug3} U_y(\frac{1}{2}\phi)= \begin{bmatrix} \cos(\frac{1}{2}\beta) & \sin(\frac{1}{2}\beta) \\ -\sin(\frac{1}{2}\beta) & \cos(\frac{1}{2}\beta) \end{bmatrix} \end{equation}\]
\[\begin{equation}\label{eq:sug4} U_z(\xi)= \begin{bmatrix} e^{i\xi} & 0 \\ 0 & e^{-i\xi} \end{bmatrix} \end{equation}\]
方法 | 作用 |
---|---|
reshape() | 不修改原数组的形状,返回一个视图,会影响原数组的数据 |
resize() | 直接作用于原数组 |
shape() | 直接作用于原数组 |
若不理解视图,可以通过 视图与拷贝 这篇博客进行了解。
ndarry.reshape()
1 | ndarry.reshape(shape) |
代码:
1 | import numpy as np |
ndarry.resize()
1 | resize(shape) :谨慎使用! |
代码
1 | n1 = np.array([[2,4,3,2],[8,4,2,9],[8,3,4,9]]) |
ndarry.shape
1 | shape |
代码
1 | n1 = np.array([[2,4,3,2],[8,4,2,9],[8,3,4,9]]) |
ndarry.ravel()
1 | ndarry.ravel(order=) |
代码
1 | n1 |
ndarry.flatten()
1 | ndarry.flatten(order=) |
代码
1 | n1 |
ndarry.reshape(-1)
函数说明
1 | n1.reshape(-1) |
代码
1 | n1 |
np.newaxis()
所在位置增加一个维度一维扩展为二维
1 | # 一维度数组 |
二维扩展为三维
1 | # 二维度数组 |
以此类推,将小维度数组扩展成更多维的数组。
ndarray.T 属性
1 | n2 |
ndarray.transpose()
1 | # 同ndarray.T |
ndarray.swapaxes(1,0)
1 | # 必须填入两个参数,进行行列转换 |
np.hstack()
水平拼接1 | np.hstack(tup) 数组的水平拼接 |
代码
1 | # 准备数组1 |
np.vstack()
竖直拼接1 | np.vstack(tup) 数组的水平拼接 |
代码
1 | # 准备数组1 |
np.concatenate()
指定数组的拼接方向1 | np.concatenate((a1, a2, ...), axis=0, out=None) |
代码
1 | # 准备数组1 |
np.tile(ndarry,(m,n))
指定数组的方向复制1 | np.tile(ndarry,(m,n)) |
代码
1 | a2 |
CSV 文件格式是存储数据的最简单和有用的格式, 本文记录将 NumPy 数组保存为 CSV 文件的不同方法。
该方法用于将 Dataframe 写入 CSV 文件中。将数组转换为 pandas Dataframe ,然后将其保存为 CSV 格式。
1 | # import necessary libraries |
该方法用于将一个数组写入文件中。创建一个数组,然后将其保存到 CSV 文件中。
1 | # import the necessary library |
该方法用于保存一个数组到一个文本文件。创建一个数组,然后将其保存为 CSV 文件。
1 | # import numpy library |
格式化器通过使用 str.format 函数和一对大括号()将一个或多个替换字段和占位符插入一个字符串中。该值将被插入占位符中,并与作为输入提供给 format函数的字符串连接。 with 是用来写进 CSV 文件的。
1 | # import numpy library |
Next 是一款优秀的 Hexo 博客主题。 随时间的推移,Next 主题已经升级到了 Next 8.21.1, 但是升级主题的时候有时候会遇到错误,比如:
造成这些问题的主要原因在于,Next
主题升级必然有许多要修改的源码或增加的功能。而按官网的教程 theme-next
的建议,升级 Next
主题时应当把原来的主题配置文件
themes/next/_config.yml
复制到根目录,也就是和
themes
一个目录,并且命名为 _config.next.yml
,
这样升级主题后配置文件由于没被覆盖而得以保留自定义设置。但是这造成另一个问题,假如升级前后两个版本的差异过大,导致有些功能上的删减,那原来的配置有可能就不再被新主题兼容,这样再生成博客就会导致出错。同时,由于配置文件没有被修改,新配置就不会生效,所以升级后应当将原配置文件
_config.next.yml
与 themes/next/_config.yml
对比,找出不同,修改成新主题的配置方式,这样就可以正常使用新系统了。
文本中的重复行,基本上不是我们所要的,所以就要去除掉。使用uniq
的时候要注意以下二点:
1 | 用法:uniq [选项]... [输入文件 [输出文件]] |
经常有这样的需求:两个文本文件要求取重复的行或只取不重复的,但是uniq
只能处理相邻重复的行,所以需要借助于sort
命令,先排序。利用现存两个文件
file1
和file2
,生成一个新的文件。
1 | cat file1 file2 | sort | uniq |
1 | cat file1 file2 | sort | uniq -d |
1 | cat file1 file2 | sort | uniq -u |
注意:对文本操作时,若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过。
矢量分析在电动力学中具有无可替代的作用和地位,但是学过电动力学的人都知道 Maxwell 方程组, 而今天我却要为 Maxwell 方程组的积分形式重申一下它们的名字。
\[\begin{equation}\label{eq:n-l} \int_{\partial \gamma} f=\int_\gamma (\nabla f)\cdot ds \end{equation}\]
梯度场通常对应于静电场,因为电场强度是电势的梯度,它的典型特点就是积分与路径无关,或都说存在原函数,满足牛顿-莱布尼兹公式。
\[\begin{equation}\label{eq:stokes} \int_{\partial S}A\cdot ds=\int_{S}(\nabla \times A)\cdot d\sigma \end{equation}\]
这个公式比较厉害,用斯托克斯一个人的名字命名. 这个公式描述的是磁感应强度是矢势的旋度, 它把磁通量用矢势的线积分表示了出来。
\[\begin{equation}\label{eq:g-a} \int_{\partial V}V\cdot dd\sigma =\int_V (\nabla\cdot B)dV \end{equation}\]
这个公式,多数人都知道是高斯公式,但是它却还有另一个人:奥斯特罗格拉德斯基,这点还是需要大家注意的。唉,看来,起名字不能太长,不然不容易被人记住。
作为一名科研人员,从一些知名期刊下载论文是一个重要的工作。然而,有些网站要么打不开,要么特别慢,然后这些科研网站又都是正规的网站。本文发布一款shell脚本来彻底解决这一痛点。
注意:本文发布有脚本目前仅支持Arch Linux
,主要是安装依赖关系,其他Linux
发行版可以自行修改。暂无发布Windows
版的计划,如果您可以用Python
实现对Windows
的支持,欢迎联系本人共同拓展syndns.sh
.
当前的网络设备已经完全可以满足大众上网的需求,一些网站为了增加功能等,会默认调用大量的js
脚本等,因此打开这个网站时就会附加后台打开若干网站。通过后台链接传输的数据不是很大,现行的网速完全可以几乎瞬时完成,造成访问不畅通的瓶颈在于DNS
,因为DNS
不断的去解析这些网站包括的所有域名,在来来回回的解析过程中耽误了大量的时间,所以本脚本的核心思路在于解决DNS
解析痛点。
整体方法包括:
IP
和域名统一写入本地/etc/hosts
,
这样每次访问这些高频网站,系统就会从本地寻址,加快了解析速度。firefox
导出近几个月的历史记录~/bookmarks-2024-12-02.json
,
然后执行syndns
,
脚本自动从历史记录中把您自己常用的网站通过谷歌的8.8.8.8
解析出可靠的IP
列表,并写入到本地文件~/.host_dns_autoadd.txt
,
然后syndns
会把它载入到内存供dnsmasq
调用。dnsmasq
并启用,实现本地作为 DNS
服务器的功能,同时把 /etc/hosts
和
~/.host_dns_autoadd.txt
中的映射关系统一放入内存
/dev/shm/dnsrecord.txt
文件中, 之后 dnsmasq
每次查询IP
就会读取一次文件
/dev/shm/dnsrecord.txt
,
而这成为最快的方式。如果不调入内存,那每次查询 IP
,
系统都会去读取 /etc/hosts
,
这个文件位于硬盘上,所以它的读取速度不是最快的,相对而言固态硬盘要比机械硬盘好很多,但是仍然远不如内存快,
所以调入内存是终极大招。本文发布之时(2024年12月02日) syndns.sh
版本为
V1.5
, 最新脚本请前往:
1 | #! /bin/sh |
syndns.sh
保存到本地,并赋于执行权限
1 | sudo chmod+x syndns.sh |
1 | syndns.sh -i |
firefox
生成的历史记录文件: 1 | syndns ~/bookmarks-2024-12-02.json |
注意:Firefox 生成历史记录文件方法,历史
→
管理历史
→ 导入和备份
→
备份...