Posts Tagged ‘python’

使用pdb调试python,具体看这里http://docs.python.org/library/pdb.html,晚些时候有空了,再翻译一下。

Saturday, August 21st, 2010 at 21:22 | 0 comments
Categories: 技术
Tags: ,

我们对同样的一些电影,书,音乐进行评分,从这些评分中能看到我们彼此之间的相似度么?说到这里你可能会想到豆瓣,我们有没有方法来模仿豆瓣计算这种相似度呢?本文是《集体智慧编程》介绍相似度算法:欧几里德距离和皮尔逊相关度系数的一次演练。 本文将介绍. 距离是在传统统计学和数据挖掘中衡量接近程度的关键度量。我们如何衡量接近程度或距离呢?在详细介绍不同距离度量方式前,让我们先描述一个便于讨论的问题场景。 故事是这样的:一些人对同样的一些电影做出了评价,我们将在这个基础上进行分析.我们按照IMDB的评分规则,10分为电影的最高评分.首先我们将能够描述这一事实的数据构造出来放入数据库中.我们需要下列的表: o    Moive表 电影信息表 o    UserInfo表 用户表(这些人将对电影给出评分) o    Moive_Level表 使用下面的SQL语句就可以完成上面数据表的建表工作. if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[Moive]‘) and OBJECTPROPERTY(id, N’IsUserTable’) = 1) drop table [dbo].[Moive] GO if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[Moive_Level]‘) and OBJECTPROPERTY(id, N’IsUserTable’) = 1) drop table [dbo].[Moive_Level] GO if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[UserInfo]‘) and OBJECTPROPERTY(id, N’IsUserTable’) = 1) drop table [dbo].[UserInfo] GO CREATE TABLE [dbo].[Moive] ( [Name] [char] (30) COLLATE Chinese_PRC_CI_AS NOT NULL , [Director] [char] (30) COLLATE Chinese_PRC_CI_AS NULL , [Actor] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL , [Year] [int] NULL , [Region] [char] (10) COLLATE Chinese_PRC_CI_AS NULL , [id] [bigint] IDENTITY (1, 1) NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[Moive_Level] ( [UserID] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL , [MoiveID] [char] (30) COLLATE Chinese_PRC_CI_AS NOT NULL , [Level] [float] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[UserInfo] ( [UserID] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [Age] [int] NULL , [ID] [bigint] IDENTITY (1, 1) NOT NULL ) ON [PRIMARY] GO 首先是Moive电影表,我从一些电影网站中抽取了1330条电影信息,覆盖了爱情电影,动作电影,科幻电影等各种类型的电影.实际上我们坐算法演示的时候只用到其中的10条数据.如下图,这10条数据是比较有代表性的,从类型和发行时间上都有特点.. 下列用户将对上面的十部电影进行评价: 用户对电影的评价是如下结构(下图试数据片段): 一个简单常用的距离度量是欧几里德距离。它以人们都评价过的电影为坐标轴,然后将参与评价的人绘制在图上,并考察它们的距离远近,换句话说这幅图就是描述了处于偏好空间中的人们.第一种算法考察方法是: 欧几里德距离 欧几里得度量定义欧几里得空间中点 x = (x1,…,xn) 和 y = [...]

Saturday, August 7th, 2010 at 10:22 | 0 comments
Categories: 技术

Python语言能够对整数进行逐位操作,它支持的运算符及含义如下所示: &:按位与 |:按位或 ^:按位异或 ~:取反 <<:左移 >>:右移 对于整型数据,各种位操作是对该数据的补码进行的(正数的补码与原码相同,下面举例皆以正数为例);对于长整型数据,由于其位宽不定,所以进行位运算时,认为其补码的符号位向外无限扩展。下面对各运算符进行举例说明: (1)首先看取反 >>> ~1 -2 >>> ~0×0001 -2 >>> 正整数1,int型是32位的,就是00000000 00000000 00000000 00000001 求反变为11111111 11111111 11111111 11111110,这正好是-2的补码。同样十六进制的0x0001结果是一样的。 (2)按位与 >>> 1&2 0 >>> 1&3 1 >>> 对于按位与,就是对参加运算的两个整数的补码逐位进行逻辑与运算,即参加运算的两个运算量,如果两个相应位都为1,则该位的结果为1,否则为0。 (2)按位或 >>> 1|1 1 >>> 1|2 3 >>> 对于按位或,就是对参加运算的两个数字的补码逐位进行逻辑或运算,即参加运算的两个运算量,只要两个相应位中有一个为1,那么该位的结果为1;只有两个相应位都为0时,该位的结果才为0。 (3)按位异或 >>> 1^1 0 >>> 1^2 3 >>> 对于按位异或,就是对参加运算的两个数字的补码逐位进行逻辑异或运算,即参加运算的两个运算量,如果两个相应位相同,那么该位的结果为0;如果两个相应位不同即相异,那么该位的结果为1。 (4)左移运算 >>> 1<<2 4 [...]

Wednesday, August 4th, 2010 at 12:48 | 0 comments
Categories: 技术

repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。注意,在大多数时候有eval(repr(object)) == object。 >>> i = [] >>> i.append(‘item’) >>> `i` “['item']” >>> repr(i) “['item']” 基本上,repr函数和反引号用来获取对象的可打印的表示形式。你可以通过定义类的__repr__方法来控制你的对象在被repr函数调用的时候返回的内容。 via:http://www.fzs8.net/python/2007-07-11/7856.html

Monday, August 2nd, 2010 at 14:08 | 0 comments
Categories: 技术
Tags:

python读取二进制文件,可以利用file和struct模块: 试着写入二进制文件 >>> from struct import * >>> file = open(r”/usr/local/apache2/logs/debug.txt”, “wb”) >>> file.write(pack(“idh”, 12345, 67.89, 15)) >>> file.close() 然后读取: >>> file = open(r”/usr/local/apache2/logs/debug.txt”, “rb”) >>> (a,b,c) = unpack(“idh”,file.read(8+8+2)) >>> a,b,c (12345, 67.890000000000001, 15) >>> print a,b,c 12345 67.89 15 >>> file.close()

Monday, August 2nd, 2010 at 11:23 | 0 comments
Categories: 技术

产生随机数 ”.join(random.sample([chr(i) for i in range(48, 123)], 6)) 以上代码将生成一个6位的从ascii 48-123的随机字符串 用到了以下函数 ”.join(seq),以”为分隔符,将seq中的所有元素合并为一个新的字符串 random.sample(seq, n),从seq这个列表中随机取出n个元素组成新的列表 chr(i) for in in range(48, 123),这是列表的映射,表示从48-123这个数组中每个数字传换成char,然后形成新的数组

Monday, August 2nd, 2010 at 11:17 | 0 comments
Categories: 技术
Tags: ,

1)这种情况是自己碰到的,我把代码精简了一下,举个列子 >>> def max(a): …     if a > 0: …         b = 1 …     print b … >>> max(1) 1 >>> max(0) Traceback (most recent call last): File “<stdin>”, line 1, in <module> File “<stdin>”, line 4, in max UnboundLocalError: local variable ‘b’ referenced before assignment 上面的代码中,当a大于 0的时候,不会出现问题,但当a不大于0的时候,就报错了。 这种错误当代码少的时候容易发现,比较难办的就是,当你的代码很多,然后中间隔了很多 [...]

Thursday, July 15th, 2010 at 15:34 | 1 comment
Categories: 技术
Tags: ,

以 #! 开头的称为组织行,这行告诉你的Linux/Unix系统当你 执行 你的程序的时候,它应该运行哪个解释器。例如:#!/usr/bin/python 以 # 开头的称为注释行。 数的4种类型:整数、长整数、浮点数和复数。 字符串: 单引号(‘)和双引号(”)的作用相同,转义符是(\),以三引号(如:”’或者”””)括起来的字符串中可以直接使用任意多个单引号(‘)和双引号 (”)而无需转义符(\)。 自然字符串:在字符串前加R(或r)指示某些不需要如转义符那样的特别处 理的字符串,如:print R“Hello\n World”,将直接输出“Hello\n World”而不会出现换行的情况。 Unicode 字符串:在字符串前加U(或u)。 缩进:Python没有类似 Begin……End 的语句来标识语句块,它依靠缩进来标识语句块,因此错误的缩进将会导致解释程序报错。 运算符与表 达式:基本上与其它语言相类似,只是有以下几点不同。 x*y:乘法。2 * 3得到6。’la’ * 3得到’lalala’。 x**y:幂运算,返回 x 的 y 次幂。 x/y:x 除以 y,4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333。 x//y: 取整除。返回商的整数部分。4 // 3.0得到1.0。 控制流语句: if-elif-else:(Python 没有 switch-case 语句,可以通过 if 语句配合字典完成同样的工作) if something == 1: doSomething1() elif something [...]

Thursday, July 15th, 2010 at 13:28 | 0 comments
Categories: 技术
Tags:

// 300) { text = text + “\r\n\n本文来自CSDN博客,转载请标明出处:” + location.href; clipboardData.setData(“text”, text); } }, 100); } } // ]]> // Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是 创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。下面分别举例说明。先来看看通过继承 threading.Thread类来创建线程的例子: threading.Thread #coding=gbk import threading, time, random count = 0 class Counter(threading.Thread): def __init__(self, lock, threadName): ””’@summary: 初始化对象。 @param lock: 琐对象。 @param threadName: 线程名称。 ”’ super(Counter, self).__init__(name = threadName) #注意:一定要显式的调用父类的初始 化函数。 self.lock = lock def run(self): ””’@summary: 重写父类run方法,在线程启动后执行该方法内的代码。 ”’ global count self.lock.acquire() for i in xrange(10000): count = count + 1 self.lock.release() lock = threading.Lock() [...]

Wednesday, March 3rd, 2010 at 14:05 | 0 comments
Categories: TODO, 技术

// 300) { text = text + “\r\n\n本文来自CSDN博客,转载请标明出处:” + location.href; clipboardData.setData(“text”, text); } }, 100); } } // ]]> // 1.join()方法的使用 join方法,如果一个线程或者一个函数在执行过程中要调用另外一个线程,并且待到其完成以后才能接着执行,那么在调用这个线程时可以使用被调用线程的join方法 例子: import threading, time class MyThread(threading.Thread): def __init__(self, id): threading.Thread.__init__(self) self.id = id def run(self): time.sleep(5) print self.id t = MyThread(1) def func(): t.start() #t.join() print t.isAlive() print func() 输出结果 True(线程运行) none 然后等待5秒以后输出1 [...]

Wednesday, March 3rd, 2010 at 14:03 | 0 comments
Categories: TODO, 技术