Grip Voicing
展开阅读
展开阅读
以下所有内容来自于NewJazz – by Oliver Prehn
Grip Voicing 是在根音上方一定音程处弹奏一整个和弦,从而获得复杂Voicing的技巧。例如在C上方小三度(b3)弹奏大七和弦Ebmaj7,就会获得添加了tension的C小七Voicing,也即下文中的grip 1a。
以下grip中Major grip指大七和弦,Lydian grip指R 3 b5 7的和弦结构,小调五声grip指R b3 4 5 b7的和弦结构
(原位: grip 1a)(34和弦/二转: grip 1b)
: minor 7th voicing(原位: grip 1a)(34和弦/二转: grip 1b)
: sus voicing(原位: grip 2a)(二转: grip 2b)
: dominant 7th voicing(原位: grip 2a)(二转: grip 2b)
: dominant 7th altered voicing(原位: grip 2a)(二转: grip 2b)
: minor tonic voicing(原位: grip 2a)(二转: grip 2b)
: minor 7th b5 voicing(grip 3)
: major voicing(grip 3)
: major 7th voicing以下是一些练习:
Grip 1 五度圈练习:
m7 voicing
sus voicing
Grip 2 五度圈练习:
7alt, m7b5, d7, m voicings
Grip 1&2 的ii-V7混合练习:
ii-V7
Grip 1&2的sus-V7混合练习:
sus-V7
Grip 1&2的m7, 7alt, sus, 7混合练习:
Grip 3五度圈练习:
ii-V7-I五度圈练习:
ii-V7-I
sus-7-69五度圈练习:
sus-7-69
m7-7alt-69:
m7-7alt-69
小调ii7b5-V7-i示例:
展开阅读
在Ubuntu上安装nvidia-docker后可以在docker容器内使用cuda环境,这可以避免手动配置深度学习开发环境的麻烦
首先,使用以下命令添加新的驱动源:
sudo add-apt-repository ppa:graphics-drivers
sudo apt-get update
在Software & Updates中找到Additional Drivers,选中Using NVIDIA driver metapackage,并apply changes
然后使用如下命令安装nvidia-docker:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt install nvidia-container-toolkit nvidia-container-runtime nvidia-docker
sudo systemctl restart docker
使用如下命令下载运行pytorch镜像:
docker pull pytorch/pytorch:1.2-cuda10.0-cudnn7-devel
docker run --gpus 1 -it -e CUDA_HOME='/usr/local/cuda' -v $local_dir:/workspace --privileged --entrypoint=/bin/bash pytorch/pytorch:1.2-cuda10.0-cudnn7-devel -i
删除所有容器:
docker stop `docker ps -a -q`
docker rm `docker ps -a -q`
共享目录,映射端口,并运行镜像:
docker run -p $LOCAL_HOST_PORT:$DOCKER_PORT -v $DIR_ON_YOUR_SYS:$DIR_ON_THE_DOCKER $IMAGE_ID
有时我们只想进入镜像的终端而不是运行镜像dockerfile里的CMD命令,这时可以执行以下命令:
docker run -it --name $CONTAINER_NAME --entrypoint=/bin/bash $IMAGE_ID -i
此命令会创建一个新的容器,使用docker ps -a查询容器ID或Name,之后可以使用以下命令关闭,打开,进入容器:
docker stop $CONTAINER_ID
docker start $CONTAINER_ID
docker attach $CONTAINER_ID
使用Ctrl-D退出容器,使用以下命令将容器保存为一个新的镜像:
docker commit $CONTAINER_ID $IMAGE_NAME
如果我们想为新的镜像添加一段CMD dockerfile代码以使镜像可以在运行时自动处理一些脚本文件呢?
新建Dockerfile
FROM #镜像名
ADD #新代码
RUN #新代码
#设置一些参数
EXPOSE 80
ENTRYPOINT [ "/home/user/endpoint.sh" ]
CMD [ "-D", "FOREGROUND" ]
使用cd进入到Dockerfile所在目录,运行如下命令:
docker build -t $NEW_IMAGE_NAME .
使用如下命令将新的镜像打包保存到tar文件里,或从tar文件里导出镜像:
docker save $NEW_IMAGE_NAME > backup.tar
docker load < backup.tar
展开阅读
//Filename: hello.cu
#include <iostream>
__global__ void add(int a, int b, int *c){
//核函数,将在GPU设备上运行
*c = a + b;
}
int main(void){
//主函数,在主机上运行
int count; //设备个数
cudaDeviceProp prop; //保存设备信息的数据结构
cudaGetDeviceCount(&count);
for(int i=0;i<count;i++){
cudaGetDeviceProperties(&prop,i); //获取设备信息并打印
printf("--- General Information for device %d ---\n",i);
printf("Name: %s\n",prop.name);
printf("Compute capability: %d.%d\n",prop.major,prop.minor);
printf("Clock rate: %d\n", prop.clockRate);
printf("Device copy overlap: ");
if (prop.deviceOverlap)
printf("Enabled\n");
else
printf("Disabled\n");
printf("Kernel execution timeout: ");
if (prop.kernelExecTimeoutEnabled)
printf("Enabled\n");
else
printf("Disabled\n");
printf("--- Memory Information for device %d ---\n",i);
printf("Total global mem: %lld\n",prop.totalGlobalMem);
printf("Total constant Mem: %ld\n",prop.totalConstMem);
printf("Max mem pitch: %ld\n",prop.memPitch);
printf("Texture Alignment: %ld\n",prop.textureAlignment);
printf("--- MP Information for device %d ---\n",i);
printf("Multiprocessor count: %d\n", prop.multiProcessorCount);
printf("Shared mem per mp: %ld\n",prop.sharedMemPerBlock);
printf("Registers per mp: %d\n",prop.regsPerBlock);
printf("Threads in warp: %d\n",prop.warpSize);
printf("Max threads per block: %d\n", prop.maxThreadsPerBlock);
printf("Max thread dimensions: (%d,%d,%d)\n",prop.maxThreadsDim[0],prop.maxThreadsDim[1],prop.maxThreadsDim[2]);
printf("Max grid dimensions: (%d,%d,%d)\n",prop.maxGridSize[0],prop.maxGridSize[1],prop.maxGridSize[2]);
printf("\n");
}
int c;
int *dev_c; //设备指针,用于将在设备上的数据传递给主机,对它的所有操作都要通过CUDA内置函数进行
cudaMalloc((void**)&dev_c,sizeof(int)); //为设备指针分配内存
add<<<1,1>>>(2,7,dev_c); //调用设备函数并读取结果, 第一个参数表示设备在执行核函数时使用的并行线程块的数量
cudaMemcpy(&c, dev_c,sizeof(int),cudaMemcpyDeviceToHost); //从共享内存复制数据
printf("Hello! CUDA C!\n");
printf("2 7 = %d\n", c);
cudaFree(dev_c);
return 0;
}
安装好NVIDIA GPU Computing Toolkit后,将X:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\extras\visual_studio_integration\MSBuildExtensions
下的文件复制到X:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations
中,打开VS2013 x64 兼容工具命令提示,输入以下命令编译以上代码
nvcc hello.cu
展开阅读
错误:找不到xxx.hpp
,找不到xxx.lib
,“模块计算机类型“x86”与目标计算机类型“x64”冲突”
,“模块计算机类型“x64”与目标计算机类型“x86”冲突
,Could NOT find 包名 ( missing: 库名 _ LIBRARY )
等等类似错误
建议使用NuGet或vcpkg安装对应的第三方库。在Visual Studio 中 解决方案-> 项目名称 ->右键->引用->管理NuGet软件包->搜索并安装对应的第三方库。如果要对整个解决方案安装 工具->NuGet包管理器->管理解决方案的NuGet程序包,则可以搜索安装对应版本的第三方库。安装后还要在需要的项目上右键->生成依赖项->生成自定义,勾选对应的第三方库。
具体使用方法参考微软官方文档:NuGet 包管理器用户界面参考
=====================================
有时我们会希望解决方案里的一个项目与其他项目共享NugetPackages以保证它们使用相同版本的第三方库且节约硬盘空间:
在vcxproj和sln文件所在文件夹添加名为packages.config和nuget.config的文件,保证每个项目的packages.config文件内容相同,且nuget.config文件指向的NugetPackages文件夹目录相同(可以使用相对目录)。重启解决方案,在解决方案的对应项目上单击右键->管理Nuget程序包,如果在其中发现了已经安装的第三方库则说明配置成功。
=====================================
错误:“LNK1107 文件无效或损坏: 无法在 0x3E8 处读取”
“属性->配置属性->链接器->输入->附加依赖项” 应配置使用到的静态库文件名,如opencv_world346d.lib
,而不是动态库opencv_world346d.dll
=====================================
错误:找不到xxx.dll
把动态库文件 opencv_world346d.dll
放在解决方案根目录或编译输出目录下
=====================================
链接时出现错误:LNK2019 无法解析的外部符号 "__declspec(dllimport) bool __cdecl caffe::GPUAvailable(void)" (__imp_?GPUAvailable@caffe@@YA_NXZ),该符号在函数 main 中被引用 main main.obj
在“属性->配置属性->链接器->输入->附加依赖项“中设置必需的静态库.lib文件,注意:如果在Release中设置了文件名中带d的静态库文件(debug静态库),即静态库类型与配置不匹配,即使设置了静态库文件也会出现上述错误
=====================================
错误 LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug
项目属性->c/c++->代码生成->运行库 改为MTd,两个项目改成相同的
=====================================
错误 LNK1123 转换到 COFF 期间失败: 文件无效或损坏
解决方案属性配置属性清单工具输入和输出嵌入清单:原来是“是”,改成“否”。
=====================================
错误 D8016 "/ZI”
和“/Gy-”
命令行选项不兼容
"C/C++" ->“常规”->“调试信息格式”->选择“程序数据库(/Zi)
”或“无”,这也会导致Debug无法进入断点
=====================================
未经处理的异常(在 XXX 中): 0xC00000FD: Stack overflow
项目属性->链接器->系统->堆栈保留大小 可以设到160000000
=====================================
C2220: 警告被视为错误 - 没有生成“object”文件
此错误后跟着的警告为导致错误的警告
=====================================
Release的解决方案配置属性和Debug不同,要看清工具栏是Release还是Debug再设置解决方案配置属性。如果一个项目为lib,Release设置为exe,Debug设置为lib,工具栏里忘记改成Debug,则会导致无法解析的外部符号_main
的错误
=====================================
在windows中使用如下命令生成Visual Studio解决方案文件(.sln
)时
cmake .. -G "Visual Studio 15 2017 Win64"
有时会遇到没有设定某个包含目录的错误,如下:
CMake Error at D:/Program Files/CMake/share/cmake-3.14/Modules/FindBoost.cmake:2147 (message):
Unable to find the requested Boost libraries.
Unable to find the Boost header files. Please set BOOST_ROOT to the root
directory containing Boost or BOOST_INCLUDEDIR to the directory containing
Boost's headers.
Call Stack (most recent call first):
cmake/Dependencies.cmake:5 (find_package)
CMakeLists.txt:43 (include)
-- Could NOT find GFlags (missing: GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY)
-- Could NOT find Glog (missing: GLOG_INCLUDE_DIR GLOG_LIBRARY)
CMake Error at D:/Program Files/CMake/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find Protobuf (missing: Protobuf_LIBRARIES Protobuf_INCLUDE_DIR)
Call Stack (most recent call first):
D:/Program Files/CMake/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
D:/Program Files/CMake/share/cmake-3.14/Modules/FindProtobuf.cmake:594 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
cmake/ProtoBuf.cmake:4 (find_package)
cmake/Dependencies.cmake:24 (include)
CMakeLists.txt:43 (include)
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
Boost_INCLUDE_DIR (ADVANCED)
used as include directory in directory E:/ubuntu/helmet-detection/hardhat-wearing-detection/SSD-RPA
used as include directory in directory E:/ubuntu/helmet-detection/hardhat-wearing-detection/SSD-RPA
查看..
文件夹下的CMakeLists.txt
发现其中有一些目录变量未设定
这时应该在上述命令前加上设定各个包含目录变量的参数,有如下方法:
cmake .. -G "Visual Studio 15 2017 Win64" -Boost_INCLUDE_DIR=XXX\XXX
如果依然出现问题,那就在错误信息提示的代码前加上
set(BOOST_ROOT "XXX/XXX")
=====================================
error LNK2038: 检测到“_MSC_VER”的不匹配项问题
将所有项目的平台工具集都设置成相同的版本,如都设成v120,清理解决方案并重新生成可以解决此问题
=====================================
Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type:
MaskPooling (known types: AbsVal, ArgMax, BN, BNLL, BatchNorm, Bias, Concat, Convolution, ConvolutionDepthwise,
Crop, Deconvolution, DetectionOutput, Dropout, ELU, Eltwise, Embed, Exp, Filter, Flatten, InnerProduct, Input,
LRN, Log, MVN, Normalize, PReLU, PSROIPooling, Parameter, Permute, Pooling, Power, PriorBox, Proposal, ROIPooling, ReLU,
Reduction, Reshape, SPP, Scale, ShuffleChannel, Sigmoid, Slice, Softmax, Split, TanH, Threshold, Tile)
用编辑器打开caffe.vcxproj
,添加
<ClInclude Include="E:\ubuntu\mini-caffe\src\layers\mask_pooling_layer.hpp" />
<CudaCompile Include="E:\ubuntu\mini-caffe\src\layers\mask_pooling_layer.cu" />
<ClCompile Include="E:\ubuntu\mini-caffe\src\layers\mask_pooling_layer.cpp" />
=====================================
LNK2019 无法解析的外部符号 "__declspec(dllimport) public: void __cdecl caffe::Net::Forward(bool)" (__imp_?Forward@Net@caffe@@QEAAX_N@Z),该符号在函数 main 中被引用
这类错误可能是由于上文所述的未设定库导致的,也有可能是由于使用的库与编译器版本不一致导致的,各版本编译器如下表
Visual Studio版本 编译器版本 平台工具集版本
Visual Studio 6 : vc6 V60
Visual Studio 2003 : vc7 V71
Visual Studio 2005 : vc8 V80
Visual Studio 2008 : vc9 V90
Visual Studio 2010 : vc10 V100
Visual Studio 2012 : vc11 V110
Visual Studio 2013 : vc12 V120
Visual Studio 2015 : vc14 V140
Visual Studio 2017 : vc15 V141
展开阅读
import numpy as np
import rawpy
import matplotlib.pyplot as plt
def pack_raw(raw):
# pack Bayer image to 4 channels
im = raw.raw_image_visible.astype(np.float32)
im = np.maximum(im - 512, 0) / (16383 - 512) # subtract the black level
im = np.expand_dims(im, axis=2)
img_shape = im.shape
H = img_shape[0]
W = img_shape[1]
out = np.concatenate((im[0:H:2, 0:W:2, :],
im[0:H:2, 1:W:2, :],
im[1:H:2, 1:W:2, :],
im[1:H:2, 0:W:2, :]), axis=2)
return np.expand_dims(out, axis=0)
def raw2rgb(matrix):
# 4 channels raw to RGB
tmp=matrix.copy()
_,width,height,dim=tmp.shape
tmp=tmp[:,:,:,:-1].reshape(width,height,3)
tmp[:,:,1]=tmp[:,:,1]/2
tmp=np.transpose(tmp,(1,0,2))
tmp = np.flip(tmp,0)
return tmp
def rgb2raw(matrix):
# RGB to 4 channels bayer raw image
tmp=matrix.copy()
height,width,dim=tmp.shape
tmp = np.flip(tmp,0)
tmp=np.transpose(tmp,(1,0,2))
tmp[:,:,1]=tmp[:,:,1]*2
tmp=np.concatenate((tmp,tmp[:,:,1].reshape(width,height,1)),axis=2)
#print(tmp.shape)
return tmp.reshape(1,width,height,4)
展开阅读
Dim oClipboard, sapi, message, oldmessage, i
i = 0
Set oClipboard = New clsClipboard
message = oClipboard.GetText
oldmessage = message
Set sapi= CreateObject("sapi.spvoice")
Set sapi.Voice = sapi.GetVoices.Item(2) ''可以用这个Item的参数改成其他tts语音(Voice)
Do Until i=100
message = oClipboard.GetText
If message <> oldmessage Then sapi.Speak message
oldmessage = message
i = i+1
WScript.Sleep 1000
Loop
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''' Subs / Classes / Functions '''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Class clsClipboard
''''' This class is used for manupilting the Windows clipboard.
''''' Under some versions of windows you may be prompted with a UAC message box
''''' before continuing. For an original copy of the example file showing how to
''''' call this class and other interesting scripts goto www.RichSchreiber.com
Private oHTML
Private Sub Class_Initialize
Set oHTML = CreateObject("InternetExplorer.Application")
oHTML.Navigate ("about:blank")
End Sub
' Get text from Clipboard
Public Property Get GetText()
GetText = oHTML.Document.ParentWindow.ClipboardData.GetData("Text")
End Property
Private Sub Class_Terminate
oHTML.Quit
Set oHTML = Nothing
End Sub
End Class
为了防止IE烦人的剪切板访问安全提示,可以在Internet选项-安全-自定义级别-脚本-允许对剪切板进行编程访问-选择启用,当想要关闭此程序时使用如下命令:
taskkill /fi "imagename eq cscript.exe"
taskkill /fi "imagename eq wscript.exe"
展开阅读
通用
:= 定义为
$\mathbb{N}:=\{1,2,3,\cdots\}\subseteq\{0,1,2,\cdots\}=:\mathbb{Z}^+$ , $\mathbb A_K^n:=\langle K^n,K^n,+\rangle$ 是域K上的n维仿射空间,$\mathbb A^n:=\langle \mathbb R^n,\mathbb R^n,+\rangle$ 是n维实仿射空间
$\mathbb{R}^+:=[0,\infty)$ , $M_{nk}(\mathbb R)$ 表示实n×k维矩阵; $\mathrm M_n(\mathbb C)$ 是n阶复方阵集合
$\mathcal L(E;F)$ 是从向量空间E到F的所有连续线性映射集合,连续线性映射要把单位闭球( $||u||\leq1$ )映射到有界集中; $\mathrm{Hom}(E,F)$ 是从向量空间E到F的所有线性映射集合
$\mathrm D f(x)(u)=\mathrm D f_x(u) $
$=df(x)(u)=df_x(u)$
$=f^\prime_x=f^\prime(x)$
$=\left( \frac{\partial f}{\partial x_1}(x) \cdots\frac{\partial f}{\partial x_n}(x) \right)\begin{pmatrix} u_1 \\ \vdots \\ u_n \end{pmatrix}$
观察以上公式可以发现,其实$f:E\to F$ 在 $x\in E$ 处的全微分(Fréchet derivative) $\mathrm D f(x)=\mathrm D f_x=df(x)=df_x$ 是一个线性形式(余向量), $df_x:\vec E\to \vec F \in \mathrm{Hom}(\vec E,\vec F)$
$f:E\to F$ 在 $x\in E$ 点的 $u\in \vec E$ 方向上的方向导数(Gâteaux derivative) $\mathrm D_u f(x)\in \vec F$
$\mathrm D_u f(a)=\mathrm D f(a)(u)$
集合B的示性函数 $I_B(s):=\left\{ \begin{array}{lcl} 1,\quad &if \quad s\in B\\ 0,\quad &otherwise \end{array} \right. $
$a\wedge b:=\min(a,b)\quad a\vee b:=\max(a,b)$
$\mathfrak{R}z, \mathrm{Re}(z)$ 表示复数z的实部, $\mathfrak{I}z,\mathrm{Im}(z)$ 表示复数z的虚部
概率论
设 $\mathcal{F}$ 是样本空间 $\Omega$ 的集类(由若干子集构成)且满足 $\Omega\in\mathcal F$ 且对有限次集合运算封闭,则 $\mathcal F$ 是样本空间的一个 $\sigma$ 域。若有定义在 $\mathcal F$ 上的集函数 $P:\mathcal F\rightarrow[0,\infty]$ 且满足非负性、完全性、可列可加性,则称 $P$ 是可测空间 $(\Omega,\mathcal F)$ 上的一个概率测度,简称概率,称 $(\Omega,\mathcal F,P)$ 为概率空间,称 $P(A)$ 为事件A的概率,若概率为0的事件的任何子集都属于 $\mathcal F$ ,则称$(\Omega,\mathcal F,P)$为完备的概率空间。随机变量是一个函数 $X:\Omega\rightarrow\mathbb R$ ,随机过程是一个二元单值函数 $X(t,\omega):T\times\Omega\rightarrow\mathbb R$ ,固定样本点 $\omega_0\in\Omega$ ,称 $X(t,\omega_0)$ 为随机过程 $X(t,\omega)$ ( 也可写作$X_t,X_t(\omega),X(t)$ )的样本函数
CF:特征函数 DF:分布函数 pdf:概率密度函数
$\sigma$ 代数: $\sigma(\mathcal{C})$ ; $\sigma(Y_\gamma:\gamma\in\mathcal{C})$
$E(X;F):=\int_F X \mathrm{d}P$
$E(X/\mathcal{G})$ 条件期望
$x=\uparrow \lim x_n:x_n\uparrow x$ ,即满足 $x_n\leq x_{n+1}(\forall n)且x_n\rightarrow x$
$x=\downarrow \lim x_n:x_n\downarrow x$ ,即满足 $x_n\geq x_{n+1}(\forall n)且x_n\rightarrow x$
$\lim\inf x_n:=\sup\limits_m\{\inf\limits_{n\geq m}x_n\}=\uparrow \lim\limits_m\{\inf\limits_{n\geq m} x_n\}$
$\lim\sup x_n:=\inf\limits_m\{\sup\limits_{n\geq m}x_n\}=\downarrow \lim\limits_m\{\sup\limits_{n\geq m} x_n\}$
$(En,\mathrm{ev}):= \lim\inf E_n:=\mathop\cup_m\mathop\cap_{n\geq m}E_n$
$(E_n,\mathrm{i.o.}):=\lim\sup E_n:=\mathop\cap_m\mathop\cup_{n\geq m}E_n$
$\mathcal L_X,\Lambda_X$ X的分布
$\mathcal L^p, L^p$ 勒贝格空间
$\mathrm{Leb}$ 勒贝格测度
$m\Sigma$ $\Sigma$ -可测函数空间
$M^T$ 在时间T停止的过程
$\langle M \rangle$ 尖括号过程
$\mu(f)$ $f$ 的关于 $\mu$ 的积分
$\mu(f;A):=\int_A f\mathrm{d}\mu$
$\varphi_X$ $X$ 的特征函数
微分几何
设$A=\begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1k} \\ \vdots & \vdots & \vdots & \vdots \\ a_{n1} & \cdots & \cdots & a_{nk}\end{pmatrix} = \begin{pmatrix} A_1 \\ \vdots \\ A_n \end{pmatrix}$ ,$I=(i_1,\cdots,i_k)$ , $1\leq i_1 < \cdots < i_k \leq n \in \{1,\cdots,n\}$
则定义A的基本k形式表示n维空间中平行六面体投影到k维的体积:$\mathrm{d}x_I(A)=\mathrm{d}x_{i_1} \wedge \cdots \wedge \mathrm{d}x_{i_k}(A)=\mathrm{det}\begin{pmatrix} A_{i_1}\\ \vdots \\ A_{i_k} \end{pmatrix}$
以向量空间 $\mathbb R^n$ 的 $\begin{pmatrix}n \\ k\end{pmatrix}$ 个基本k形式为基底可以构成向量空间 $\wedge^k(\mathbb R^n)$
k形式 $\omega$ 是一个多重线性实值函数 $\omega: M_{nk}(\mathbb R)\rightarrow \mathbb R$ ,它是$\wedge^k(\mathbb R^n)$中的一个向量
$A=(A_1,\cdots,A_{k+l})$ 是一个N×(k+l)矩阵, $\tau$ 是k形式, $\omega$ 是l形式,则:
$\tau \wedge \omega(A)=\sum\limits_{\sigma\in S(k,l)}(-1)^{sign(\sigma)}\tau(A_{\sigma(1)},\cdots,A_{\sigma(k)})\omega(A_{\sigma(k+1)},\cdots,A_{\sigma(k+l)})$
微分k形式 $\omega = \sum\limits_{\text{all possible }I}f_I \mathrm d x_I$ ,微分0形式就是一个可微函数
外微分d是从k形式到k+1形式的映射 $\mathrm d:k\text{-forms}\rightarrow (k+1)\text{-forms}$ ,给定以上定义的微分k形式 $\omega$ ,外微分 $\mathrm d \omega=\sum\limits_{\text{all possible }I}\mathrm d f_I\wedge\mathrm d x_I$ ,其中 $f_I$ 是微分0形式, $\mathrm d f_I=\sum\limits_{i\in I} \frac{\partial f}{\partial x_i}\mathrm d x_i$
给定一个流形M的参数化映射 $\phi:R^k \supseteq B\rightarrow M$ ,它在点p的切空间 $T_p(M)$ 的基底是雅可比矩阵 $D\phi$ 中的列向量,且有 $\int_M \omega=\int_B \omega(D\phi)\mathrm d u_1\cdots\mathrm d u_k$
$\int_M \mathrm d \omega=\int_{\partial M}\omega$
代数
(k,l)shuflle是置换群 $S_n,(n:=k+l)$ 的一个置换 $\sigma$ ,满足 $\sigma(1)<\sigma(2)<\cdots<\sigma(k),\sigma(k+1)<\sigma(k+2)<\cdots<\sigma(k+l)$
$sign(\sigma)=\left\{ \begin{array}{lcl} 0, \quad \text{if }\sigma\text{ is even }\\ 1, \quad \text{if }\sigma\text{ is odd}\end{array} \right.$
$\sim$ 是集合S的一个等价关系,对 $\forall a\in S$ ,S的一个等价类 $[a]=\{x\in S|x\sim a\}$ ,S在等价关系下的商集是S的全体等价类的集合,记作 $S/\sim$
$\mathrm{GL}(n,\mathbb R)$ 是n阶广义线性群, $\mathrm{GL}(n,\mathbb R) \subseteq M_{n}(\mathbb R)$ ; $\mathrm{GL}(V)$ 是从向量空间V到V的线性变换群;如果$\mathrm{GL}(n,\mathbb R)$的元素$A$满足$\mathrm{det}(A)=1$,叫做特殊线性群,记为$\mathrm{SL}(n,\mathbb R)$;满足$QQ^\top=Q^\top Q=I_n$的n阶实矩阵关于矩阵乘法构成的群叫正交群,记为$\mathbf{O}(n, \mathbb R)$;如果$\mathrm{det}(Q)=1$,则称为特殊正交群,记为$\mathbf{SO}(n, \mathbb R) $
参考文献
[1] 应用随机过程 白晓东 ISBN:978-7-302-50734-5 O211.6
[2] 概率和鞅 戴维·威廉姆斯著 郑坚坚译 ISBN:978-7-312-04368-0 O21
展开阅读
展开阅读
不能省略的几步:
菜谱
蒸米:有钱的可以直接上电饭煲,想要手动的话可以使用普通的有锅盖的炒锅或炖锅。首先淘米,加水泡2分钟,将米倒入锅中,加过量水(至少漫过米,越多越好),盖上盖;接着开火尽量快速加热到听到水沸腾声音,将火调小,控制将水烧干的时间为约10分钟(米多时可延长时间,越长越好;水多导致很长时间水还没干时可以适当开大火),其中水烧干的标志为听到米饭爆裂的噼啪声;最后不要开盖,用剩余的蒸气再把米饭焖一会。正如其字面意思,蒸米是用蒸气把米蒸熟的,因此需要控制蒸气保持的时间,米越多,蒸气保持的时间也越长,而蒸气保持的时间大约为 $t=\frac{w}{p}$ ,其中t为蒸气时间,w为水量,p为加热功率,蒸米时需要控制好公式右侧的w和p以保证蒸气时间,其中p更容易实时控制,因此建议选择合理水量,实时调整加热功率。
炒饭:如果蒸好的米过干,在炒饭时可以适当加入清水,油不要过多,加油加到刚好不粘锅为止,不够可续。如果使用粗盐,不要在出锅后添加,应适当提前加入盐,让盐充分溶化。鸡蛋可以加盐打碎炒熟了再加到米饭里,也可以在锅边沿留下空地,在空地处炒熟再混合,也可以直接打入米饭中,不过可能要多加蛋。
热剩饭:放进微波炉之前一定要盖盖子,因为微波炉天花板上可能有脏东西,如果没有盖盖子,水蒸汽冷凝后的水滴可能夹杂天花板上的脏东西滴到饭上
红萝卜炒肉:红萝卜和肉都不容易熟,葱等调味菜很容易炒焦,因此要先分别把肉和红萝卜炒熟,最后加葱。
煮面(Spaghetti):把锅底和内壁用油润湿,打入鸡蛋;切葱和红萝卜加入锅中,加盐,加热至鸡蛋凝固,加70%水进入锅中,开大火,加入Spaghetti并折断,使其没入水中,待水沸腾后中火10分钟左右,当Spaghetti变软且红萝卜变软时就可以吃了。也可以先煮面,边煮面边切菜,在面煮好后倒出面并炒菜,最后混合。煮之前可以在锅底涂上一层油防止粘锅。
爆米花:需要袋装的爆米花用玉米。用纸做一个漏斗,倒入玉米,加入少量食用油,混合均匀,把用纸包好的玉米放入容器中并在微波炉内加热,当爆炸声停止时即可取出。纸是为了防止过热玉米使容器熔化,使用玻璃容器可以不用纸包裹。
酵母:玻璃容器在沸水中消毒,加入3勺面粉和2勺水,盖上盖子发酵一天,如果表面出现一层半透明液体则倒掉这层液体,重复上述过程至面糊能浮在水面上为止
面包:用电饭煲做面包时可以在里面撒一些水,并把面团切成多份,在小面团之间留一定空隙,利用蒸气使温度传导更均匀;可以在电饭煲内胆中揉面,在底部垫一张卫生纸可防止内胆滑动;面团用冷水,使用少量酵母,并缓慢长时间发酵可以使淀粉被分解,使面包更甜
米饭汤:可以在煮米饭时用bouillon炖汤,把炖好的汤倒进饭里,也可以把菜和米一起煮
食材
开了盖子的罐头或开了包装袋的湿食材一定要在2顿之内吃完,否则就不要打开
不要相信冰箱的保鲜能力,肉类在保鲜档不要放超过一天,青菜类和鸡蛋如果买回来时还保有生物活性,则可以在保鲜档放超过一天,但要经常检查冰箱以防止变质
米面类如果未沾水可以长期保存,不要放到冰箱内,因为容易沾上水汽导致发霉
热带水果(香蕉)买回来时还保有生物活性,放入冰箱会被冻伤导致生物活性丢失,从而导致变质
萝卜不要和苹果,香蕉放在一起,可以放在水里或用湿纸巾包裹,并把包装密封防止水分流失,不要冷冻,要定期检查是否变软。
土豆不能和洋葱,红薯或香蕉放在一起,不能放在塑料袋里。贮存方法:用开水烫,擦干,放在阴暗干燥的地方(可以用报纸包住),可以和苹果放在一起,定期检查是否变质。切土豆时可以先切成片,然后摊开切成丝
辣椒不能放在低于8摄氏度的冰箱中,可以油炸脱水后保存在干燥容器里。
在超市买菜时要数清楚数量以便核对账单,记账后的东西要快点放包里防止重复记账
炊具
微波炉蒸锅(Steamer microwave snips):虽然在锅底加了水,在加热过程中能产生蒸汽,但是由于微波炉是利用了水分子共振的原理加热的,因此如果上层蒸笼中的食材很干,蒸汽并不能提供水分,高温(130°左右)的蒸汽反而会加速食材的脱水。因此最好在放上蒸笼之前先把水加热至沸腾,再取出蒸锅放上蒸笼,最好还要在食材中心附近洒点水(因为中心的温度最高,脱水最严重)。经验来自于一次失败的过夜法棍软化实验XD。
微波炉:使用微波炉之前要先观察内壁是否有食物残留,有残留应擦干净否则会引起放电。不要放入过大的容器,否则会损坏云母片。A4纸,筷子不能放进微波炉
电饭煲:不要关着盖子用电饭煲煮麦片和牛奶,可以开着盖并随时准备拔电,防止溢出
洗碗池:如果洗碗池边缘进水,可以把长条形的卫生纸放在边缘,利用虹吸效应把水吸出来
最佳食材
使用线性规划求解器得到的最佳营养搭配的食材如下:
Farine de mais 玉米面 2.4g
chou 卷心菜 5.1g
épinard 菠菜 2.3g
haricots blancs 白腰果 46.7g
展开阅读
清除已经删除的软件包:
sudo apt-get purge $(dpkg -l | grep '^rc' | awk '{print $2}')
查看磁盘占用最大的包:
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n
在已安装的包中查找:
apt list -a --installed pkgname
查看系统发行版:
echo $(. /etc/os-release;echo $ID$VERSION_ID)
安装常用软件(五笔输入法,网络监视器):
sudo apt install ibus-table-wubi bmon git
sudo reboot
# 之后在System Settings -> Text Entry 中添加五笔输入法即可
查看当前所在的工作目录(present working dir):
pwd
下载一个目录下的所有文件:
wget -r -np -R "index.html*" http://aaaa.aaa/aaa/aa
查看数学库的所有对象文件:
ar –t libm.a
查看数学库的所有依赖:
ldd libm.so.6
压缩解压:
c:compress, x:eXtract, f:file, z:Gzip (.tar.gz, tgz), j:Bzip (.tar.bz), J:lzma (.tar.xz)
tar cf dir.tar dir/
tar xf dir.tar
tar cfz dir.tar.gz dir/
tar xfz dir.tar.gz
tar cfj dir.tar.bz2 dir/
tar xfj dir.tar.bz2
tar cfJ dir.tar.xz dir/
tar xfJ dir.tar.xz
gunzip file.gz
gzip file
显示文件信息:
file xxx.txt.gz
screen快捷键
screen
# Ctrl a + ? # 帮助信息
# Ctrl a + d # 脱离session
# Ctrl a + k # 杀死session
# Ctrl a + Esc # 进入Copy模式,可以查看历史记录
screen -ls #查看ID
screen -r $ID # 恢复session
git常用命令
git config --global core.autocrlf true # 防止换行中的^M被commit
git rm --cached `git ls-files -i --exclude-from=.gitignore` # 删除掉所有刚添加进.gitignore里的文件
git rm -r --cached . # 删掉刚添加(git add)的所有文件
# 从所有历史commit中删除文件
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \
--prune-empty --tag-name-filter cat -- --all
git push origin --force --all
# 取消上一次commit
git reset HEAD~
# 第一次提交commit时
git update-ref -d HEAD
git rm --cached -r .
# 开启新branch
git checkout -b $NEW_BRANCH
git push -u origin $NEW_BRANCH
# 查看未提交变更
git diff --cached
# clone一个子目录
git clone --depth 1 --filter=blob:none --no-checkout https://github.com/KupynOrest/DeblurGAN
cd DeblurGAN
git checkout master -- motion_blur
# 处理win和linux换行
git config --global core.autocrlf input # linux
git config --global core.autocrlf true # win
# 不克隆历史commits
git clone xxx --depth=1 ts
ssh
# 免密登陆
cd .ssh
ssh-keygen -t rsa
scp id_rsa.pub USER@HOST:/HOME/.ssh
ssh USER@HOST
cd .ssh
cat id_rsa.pub >> authorized_keys
# ssh隧道,远程jupyter
ssh -N -L PORT_LOCAL:localhost:PORT_SERVER USER@HOST
# ssh反向隧道实现代理共享
ssh -N -R PORT_LOCAL:proxy.website.com:PROXY_PORT USER@HOST
并在HOST上设置环境变量HTTPS_PROXY=127.0.0.1:PORT_LOCAL
# 代理ssh服务器,使用配置文件
# ~/.ssh/config
Host host1
User username1
Hostname www.example.com
Host hpc2
Hostname www.baidu.com
User username2
ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe -W %h:%p host1
IdentityFile C:\Users\xxx\.ssh\id_rsa
# 不使用配置文件
ssh -J host1 host2
# 同步文件,忽略已下载文件
until rsync -a --ignore-existing /local/directory/ host:/remote/directory/
do
echo Retrying
done
# 在A上通过hotsopt共享socks代理到B
gost-windows-amd64.exe -L=:LOCAL_PORT -F=:SOCKS_PORT #并在B上设置代理服务器为A:LOCAL_PORT
conda环境
conda create --name my-env-name --file requirements.txt --channel default --channel anaconda
conda pack -n my-env-name
记录内存使用日志
top -d 10 -b -o %MEM > mem.log
当剩余内存量小于500MB时,执行命令
while true
do
if [ $(awk '/^MemAvailable:/ { print $2; }' /proc/meminfo) -lt 500000 ]
then
# execute you cmd
fi
sleep 10
done
jack配置
sudo adduser currentuser audio
qjackctl # 在setting/parameters中设置Interface为hw:Generic
如果出现
22:29:06.211 XRUN callback (16).
Tue Jul 20 22:29:06 2021: ERROR: JackEngine::XRun: client = SuperCollider was not finished, state = Running
Tue Jul 20 22:29:06 2021: ERROR: JackAudioDriver::ProcessGraphAsyncMaster: Process error
就把Frames/Period调大或把Sample Rate调大
使用cgroup限制进程xxx使用的内存
cd /sys/fs/cgroup/memory
sudo mkdir xxx-cgroup
cd xxx-cgroup
sudo su
echo 1000000000 > memory.limit_in_bytes
for pid in $(pgrep xxx\_.*)
do
echo $pid >> tasks
done
当管道遇到单行数字pattern时停止管道等待用户回车
while read line
do
echo $line
if [[ $line =~ ^[0-9]$ ]]
then
read -s <&1
#sleep 2
fi
done < /dev/stdin
常用环境变量
export PYTHONPYCACHEPREFIX=~/.cache # 便于之后清理pycache