风雨钝剑的小窝

Python学习笔记2

记录一下最近的python学习和使用中的技巧,主要是函数、面向对象的内容,

备忘,如有转载,请注明出处。

——by realasking

Linux下python使用和学习笔记,面向对象部分,包括函数、多个返回值、传递对象、模块、面向对象等内容,

共分7个文件,其中test.py是主文件,mod.py是一个简单的函数文件,modclass.py是一个类,也是modinheritance.py的基类,

而以xxinheritancexx为名的都是派生和继承的练习。

test.py的内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#python函数、类、模块学习脚本
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09

import mod as md
import numpy as np
import modclass as mc
import modinheritance as mi
import modinheritance2 as mi2
import modmultiinheritance as mmi

def firstfunc() :
    print '第一个函数'

firstfunc()

a=0.0
b=''
c=''

def testnumber(a,c) :
    global b
    a=a+1.0
    b='你好'
    c=b
    return [a,b,c]

#python可用列表或元组返回多个参数,放到不同变量中
[a,b,c]=testnumber(a,b)

print a,b
c=''
[a,b,c]=testnumber(a,c)
print a,b,c


#测试不同数据类型的传递
d=np.array([[1,2,3],[4,5,6],[7,8,9]])

def nptest(x) :
    y=np.sin(x)
    return [x,y]

[xx,y]=nptest(d)
print d
print xx
print y

cc=xx*y
print cc

#测试module文件中的函数
[xxx,yy]=md.nptest(d)
print xxx 
print yy

#类的测试
zs=mc.modclass()
zs.nptest(d)
[xxxx,yyy]=zs.getxy()
print xxxx
print yyy 

#测试列表 
xxtmp=[]
i=0
while i < 10:
   zss=mc.modclass()
   zss.nptest(xxxx)
   [xxxx,yyy]=zss.getxy()
   xxtmp.append(zss)
   print xxtmp[i].x
   i+=1

#派生类测试
mis=mi.modinheritance()
mis.nptest(xxxx)
[xxxxx,yyyy,cc]=mis.getxy()

#派生类测试2
mis2=mi2.modinheritance2()
mis2.nptest(xxxx)
[xxxxx,yyyy,cc,dd]=mis2.getxy()
print xxxxx,yyyy,cc,dd

#多重继承测试
mis3=mmi.modmultiinheritance()
mis3.nptest(xxxx)
cccccc=mis3.getxy()
print cccccc

mod.py文件内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#函数的使用
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09

import numpy as np

def nptest(x) :
       y=np.sin(x)
       return [x,y]

modclass.py文件内容,也是类的构建:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的使用
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09

import numpy as np

class modclass:
    #初始化,定义内部变量
    def __init__(self):
        self.a=0
        self.x=np.array([])
        self.y=np.array([])
    #从外部传值进来进行计算
    def nptest(self,x):
       self.x=x
       self.y=np.sin(self.x)
    #返回值
    def getxy(self):
       return [self.x*self.y,self.y]

modinheritance.py文件内容,也是类的继承:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的继承和派生
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09

import numpy as np
import modclass as mc

class modinheritance(mc.modclass):
    #初始化,定义内部变量
    def __init__(self):
        mc.modclass.__init__(self)
        self.b=0
        self.aa=np.array([])
        self.bb=np.array([])
    #从外部传值进来进行计算
    def nptest(self,x):
       #调用父类同名函数,内部变量仍然共享
       mc.modclass.nptest(self,x)
       #self.a是父类中提供的内部变量,继承而来
       self.b=self.a+2
       #调用getxy也是父类中的
       [self.aa,self.bb]=mc.modclass.getxy(self)
    #返回值
    def getxy(self):
       return [self.aa,self.bb,self.b]

modinheritance2.py文件的内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的继承和派生2
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09

import numpy as np
import modclass as mc
import modinheritance as mi

class modinheritance2(mi.modinheritance):
    #初始化,定义内部变量
    def __init__(self):
        mi.modinheritance.__init__(self)
        self.c=0
        self.cc=np.array([])
    #从外部传值进来进行计算
    def nptest(self,x):
       #调用父类同名函数,内部变量仍然共享
       mi.modinheritance.nptest(self,x)
       #self.a是父类中提供的内部变量,继承而来
       self.c=self.b*2
    #返回值
    def getxy(self):
       return [self.aa,self.bb,self.b,self.c]

modinheritance3.py文件的内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的继承和派生3
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09

import numpy as np
import modclass as mc
import modinheritance as mi

class modinheritance3(mi.modinheritance):
    #初始化,定义内部变量
    def __init__(self):
        mi.modinheritance.__init__(self)
        self.c=0
        self.cc=np.array([])
    #从外部传值进来进行计算
    def nptest(self,x):
       #调用父类同名函数,内部变量仍然共享
       mi.modinheritance.nptest(self,x)
       #self.a是父类中提供的内部变量,继承而来
       self.c=self.b*2-1
    #返回值
    def getxy(self):
       return [self.aa,self.bb,self.b,self.c]

modmultiinheritance.py文件的内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#类的多继承和派生
#作者:realasking
#主页:http://realasking.github.io
#2013-10-09

import numpy as np
import modclass as mc
import modinheritance2 as mi2
import modinheritance3 as mi3

class modmultiinheritance(mi2.modinheritance2,mi3.modinheritance3):
    #初始化,定义内部变量
    def __init__(self):
        mi2.modinheritance2.__init__(self)
        mi3.modinheritance3.__init__(self)
        self.cc=np.array([])
    #从外部传值进来进行计算
    def nptest(self,x):
       #调用父类同名函数,内部变量仍然共享
       mi2.modinheritance2.nptest(self,x)
       mi3.modinheritance3.nptest(self,x)
       [a,b,c,d]=mi2.modinheritance2.getxy(self)
       [e,f,g,h]=mi3.modinheritance3.getxy(self)
       self.cc=h*b+f/g
    #返回值
    def getxy(self):
       return [self.cc]

执行结果:

[realasking@Laptop mod_test]$python ./test.py 
第一个函数
1.0 你好
2.0 你好 你好
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[ 0.84147098  0.90929743  0.14112001]
 [-0.7568025  -0.95892427 -0.2794155 ]
 [ 0.6569866   0.98935825  0.41211849]]
[[ 0.84147098  1.81859485  0.42336002]
 [-3.02720998 -4.79462137 -1.67649299]
 [ 4.59890619  7.91486597  3.70906637]]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[ 0.84147098  0.90929743  0.14112001]
 [-0.7568025  -0.95892427 -0.2794155 ]
 [ 0.6569866   0.98935825  0.41211849]]
[[ 0.84147098  1.81859485  0.42336002]
 [-3.02720998 -4.79462137 -1.67649299]
 [ 4.59890619  7.91486597  3.70906637]]
[[ 0.84147098  0.90929743  0.14112001]
 [-0.7568025  -0.95892427 -0.2794155 ]
 [ 0.6569866   0.98935825  0.41211849]]
[[ 0.84147098  1.81859485  0.42336002]
 [-3.02720998 -4.79462137 -1.67649299]
 [ 4.59890619  7.91486597  3.70906637]]
[[ 0.62742108  1.76304538  0.17392737]
 [ 0.34550582 -4.77841949  1.667137  ]
 [-4.56932481  7.90020068 -1.99363595]]
[[ 0.36833317  1.73056479  0.03009844]
 [ 0.11701337 -4.76800625  1.65940619]
 [-4.52264351  7.89176398  1.8180512 ]]
[[  1.32622372e-01   1.70852457e+00   9.05779427e-04]
 [  1.36609043e-02  -4.76063376e+00   1.65289587e+00]
 [ -4.44147235e+00   7.88613188e+00   1.76276049e+00]]
[[  1.75371785e-02   1.69234561e+00   8.20436258e-07]
 [  1.86614503e-04  -4.75509451e+00   1.64732846e+00]
 [ -4.27947407e+00   7.88205653e+00   1.73038103e+00]]
[[  3.07536865e-04   1.67985944e+00   6.73115654e-13]
 [  3.48249724e-08  -4.75075909e+00   1.64250647e+00]
 [ -3.88467867e+00   7.87895041e+00   1.70839371e+00]]
[[  9.45789219e-08   1.66987858e+00   4.53084684e-25]
 [  1.21277870e-15  -4.74726233e+00   1.63828512e+00]
 [ -2.62823228e+00   7.87649452e+00   1.69224667e+00]]
[[  8.94517247e-15   1.66168844e+00   2.05285731e-49]
 [  1.47083218e-30  -4.74437593e+00   1.63455555e+00]
 [  1.29074388e+00   7.87449858e+00   1.67978152e+00]]
[[  8.00161105e-29   1.65482924e+00   4.21422313e-98]
 [  2.16334731e-60  -4.74194900e+00   1.63123425e+00]
 [  1.24045771e+00   7.87284127e+00   1.66981536e+00]]
[[  6.40257794e-057   1.64898987e+000   1.77596766e-195]
 [  4.68007157e-120  -4.73987740e+000   1.62825592e+000]
 [  1.17338934e+000   7.87144118e+000   1.66163597e+000]]
[[  1.68042640e-225   1.63955432e+000   0.00000000e+000]
 [  0.00000000e+000  -4.73652238e+000   1.62313097e+000]
 [  9.55219008e-001   7.86920111e+000   1.64895184e+000]] [[  4.09930043e-113   9.97325369e-001   0.00000000e+000]
 [  2.19030699e-239   9.99669830e-001   9.98500367e-001]
 [  8.82872574e-001   9.99867812e-001   9.96475032e-001]] 2
[[  1.68042640e-225   1.63955432e+000   0.00000000e+000]
 [  0.00000000e+000  -4.73652238e+000   1.62313097e+000]
 [  9.55219008e-001   7.86920111e+000   1.64895184e+000]] [[  4.09930043e-113   9.97325369e-001   0.00000000e+000]
 [  2.19030699e-239   9.99669830e-001   9.98500367e-001]
 [  8.82872574e-001   9.99867812e-001   9.96475032e-001]] 2 4
[array([[  1.43475515e-112,   3.49063879e+000,   0.00000000e+000],
       [  7.66607448e-239,   3.49884441e+000,   3.49475128e+000],
       [  3.09005401e+000,   3.49953734e+000,   3.48766261e+000]])]

Python学习笔记1

以前所写第一篇python学习笔记,主要记录最初一个月python学习和使用中了解到的一点技巧,主要是数值计算方面的,

备忘,如有转载,请注明出处。

——by realasking

Linux下Python程序名应取作:xxx.py,然后程序第一行写成:

#!/usr/bin/env python

未加语言相关的环境变量设置时,不应在python程序中加入非ASCII的字符,程序文件中以#引起的行为注释行。

Python程序写好后可按如下方法运行:

$python ./xxx.py 参数1 参数2 ...

其中python这一命令由系统环境变量$PYTHON的值或alias指定的python来决定,而参数的引入,是通过sys.argv来实现的, 应这样来使用参数:

1
2
3
4
5
import os
import sys
input_Args=sys.argv
Arg1=input_Args[1]
Arg2=input_Args[2]

由于参数是字符串,所以如果要传递数值型参数,需要用相应的函数转换,比如:

Arg1=float(Arg1)

python最方便的一点是它是胶水语言,较头痛的则是它的数据类型、文件读写等和其它语言有较大差别,第一个容易忘记的 地方是,它没有double型,它的float型即double精度,类型转换也应用float(A)这样的形式。另外,python的数据类型一般 不需要专门声明,不过可以定义空数组,在数值计算中,这个做法还是有些用的:

tmp=[]

python的循环和条件判断,采用缩进来区分,没有其它定界符,相同缩进表示相同层级的语句,至于循环和条件语句的开 始行的行末,则需要添加:作为标志,比如条件判断:

1
2
3
4
5
6
a=11
b=10
if b > a :
   print "b>a"
   elif b < a :
      print "b<a"

在python中,感觉使用while循环比for循环更方便些,比如:

1
2
3
4
5
AA=11
a=0
while a < AA :
      执行语句
      a=a+1

用python读取格式化文本不是太方便,不过还是有办法的,比如读取一个数据矩阵中的一行数据:

1
2
3
4
5
6
7
8
f=open(input_file_name,"r")
......
data=[]
line=f.readline()
line=line.strip()
data.append(map(float, line.split(' ')))
.....
f.close()

如果是要读取整个矩阵,在data=[]和最后的append之间加上循环就是了。

矩阵或向量运算,应该采用numpyscipy,做法是:

1
2
3
import math
import numpy as np
import scipy as sp

然后就可以进行运算了,比如加法、除以一个数:

1
2
3
npdata=np.array(data)
data_sum=np.add(npdata,npdata)
data_frac=np.true_divide(npdata,2)

也可以按列合并矩阵(要求两矩阵行数一样):

new_matrix=np.hstack([mat1,mat2])

或按行合并矩阵(要求两矩阵列数一样):

new_matrix=np.vstack([mat1,mat2])

合并矩阵的命令同样可以用于合并向量,但是合并向量的时候有时会提示行列数不对,那可能是因为一个的维度是 (n个),而另一个的维度是(n列,1行),这种情况下,可用reshape来进行转换:

1
2
array2=array2.reshape(n)
new_array=np.hstack([array1,array2])

查看矩阵或向量维度的办法是:

xxx.shape

对于一个矩阵,若按其第一列元素大小顺序来对整个矩阵进行行排序,则执行:

mat1=mat1[mat1[:,0].argsort()]

在屏幕上输出数组:

print mat1

保存一个矩阵到文件:

np.savetxt(输出文件名,矩阵名)

RHEL/CentOS上用x11vnc搭建vnc远程桌面服务

个人操作笔记,如有转载,请注明出处。
——by realasking

服务器端配置

1.安装

1
2
3
4
5
#tar -xzvf x11vnc.tar.gz
#cd x11vnc
#./configure --prefix=/usr
#make
#make install

2.配置

vi /etc/xinetd.d/x11vnc

输入以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
service x11vnc
{
port = 5900
type = UNLISTED
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/x11vnc
server_args = -inetd -o /var/log/x11vnc.log -display :0 -forever -auth /var/gdm/:0.Xauth -localhost -many -bg
disable = no
}

保存,然后执行:

#service xinetd restart

编辑/boot/grub/grub.conf,在kernel行后加上5

客户端配置

3.客户端软件

若用putty
Connection-SSH-Tunnels,source port 5900,Destination 127.0.0.1:5900,Local,Auto,

然后点击Add,并保存

若用cygwin-X

假设cygwin安装到(包括必要的x组件):

E:\cygwin
新建一个快捷方式:CygWin-X,内容是:
E:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe -wgl

启动ssh转发

启动putty; 或者启动CygWin-X,并执行ssh username@host -L 5900:localhost:5900

启动TightVNC Viewer

Server栏填写:localhost
Connection profile选择:High-speed network
然后点击connect

参考链接


使用linux系统和微单相机拍摄和合成星轨照片

如有转载,请注明出处。

——by realasking

星空图

图片一

星轨图

图片二

拍摄及方法

上面的星轨图就是由六十三张前面的星空图所合成的,其中星空图的拍摄方法是:iso 20030sf3.5,开了抗噪,没关防抖,每次延时2s拍摄。然后就是合成,步骤是:

配准图片

执行命令:

1
$l=`ls|xargs`;align_image_stack -a aligned_ $l

这一步需要安装hugin软件。

转换配准图片为jpg

执行命令:

1
$for i in *.tif;do a=`echo $i|cut -d"." -f1`;convert $i ${a}.jpg;done

这一步需要安装imagemagick软件。

拼图

运行StarStaX,先选星图,再选暗场图,然后调整preference,再按startprocess按钮,再按save as按钮保存图像。

进一步处理

先用rawtherapee打开图像,色温设置为3000K动态色彩设置为10,勾选找回暗部,适当提高对比度, 然后调用gimp,选择天空部分,使用小波降噪插件降噪,降噪之后,执行一次膨胀,再进行一次降噪,然后再执行两次膨胀,最后保存图片。

使用到的软件

hugin imagemagick StarStaX rawtherapee gimp gimp的小波降噪插件

fortran调用gsl的环境的建立

以前的个人笔记,仅作备忘之用,如有转载,请注明出处

──by realasking

为了解一个方程,只好用fortran来调用gsl库,上网查了一下,有一个fgslfortran调用gsl的接口库, 结果花了两天时间才搞好这个调用的环境,要点如下:

1.fgsl需要intel fortran compiler 11.1.05x及以上的fortran编译器,04x的不行

2.fgsl-0.9.4需要最新的gsl,即gsl-1.15

3.gsl-1.15编译需要libtool 2.4

4.icc编译gsl-1.15能完成,但通不过测试(make check会失败),因此只能用gcc,我用的版本是gcc 4.4.4

5.因此fgsl编译时fortran编译器应指定为ifort,但C编译器应指定为gcc

因此安装过程就是:先升级libtool2.4,再编译gsl,最后编译fgsl

下面是下载地址:

fgsl下载地址 gsl下载地址

编译过程为:

gsl:

1
2
3
4
$./configure --prefix=/usr/local --libdir=/usr/local/lib64 --enable-static --enable-shared
$make 
$make check
$sudo make install

fgsl:

1
2
3
$./configure --prefix /usr --f90 ifort --gsl /usr/local
$make 
$sudo make install

最后建立的环境为:

gsl在:/usr/local

fgsl在:

/usr/include/ifort/fgsl.mod
/usr/lib64/libfgsl_ifort.a

使用:

fgsl的作者在readme文件中写得很详细


更多文章