2

真的好失望

Posted by 梓权 on 2016年8月16日 in 未分类 |
  • 失望失望失望失望失望失望失望失望失望失望失望失望失望失望失望失望失望失望失望失望,好失望啊

0

python 数值类

Posted by 梓权 on 2016年6月7日 in Python |

看了这个以后,发现python的设计真的比其他语言碉堡了。。。

下面基于2.7.11版本

python的数值类分为3类:

  1. 整型
  2. 浮点数
  3. 复数

1.整型:

  • 常整型:跟机器位数相关,32位又或者64位,跟其他语言订死了不一样。
  • 长整型:跟内存有关,没有具体大小,一旦超过常整型会自动转为长整型,这也是有的人区分不了python的整型的原因。
  • 布尔型

2.浮点数

python 不支持单精度,也就是说python的float相当与c的double,官方说这样做是为了节约内存

3.复数

由一对float构成,没有什么好说

以上来自:https://docs.python.org/2/reference/datamodel.html#index-23

标签:

0

3. Longest Substring Without Repeating Characters

Posted by 梓权 on 2016年6月7日 in LeetCode |

要求如下:

Given “abcabcbb”, the answer is “abc”, which the length is 3.

Given”bbbbb”, the answer is “b” ,with the length of 1.

Given”pwwkew” the answer is”wke”,with the length of 3. Note that the answer must be a substring, “pwke” is a subsequence and not a substring.

一般的做法是用两个for暴力循环,如下:


class Solution(object):  
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        s_l = len(s)
        max_sub = 0
        sub = set([])
        for i in range(s_l):
            for j in range(i+1,s_l+1):
                if s[j-1] not in sub:
                    sub.add(s[j-1])
                    max_sub = max(len(sub),max_sub)
                    print sub
                    print i,j
                else:
                    sub = set([])
        return max_sub

if __name__ == "__main__"  :  
    s = raw_input()
    print Solution().lengthOfLongestSubstring(s)  

该复杂度是O(N*N),这个是提交不了的,看了看官网的解决方案。其实我们不必有两层循环,我们可以定一个滑动窗口,当遇到和前面重复的字符时,我们不要重新开始判断,直接在前面的基础上把重复的元素删去。复杂度:O(min(m,n))


class Solution(object):  
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        s_l = len(s)
        sub = set([])
        i = j = max_sub = 0
        while(i < s_l and j < s_l):
            if s[j] not in sub:
                sub.add(s[j])
                j += 1
                max_sub = max(len(sub),max_sub)
                print sub
                print i,j
            else:
                sub.remove(s[i])
                i += 1
        return max_sub

if __name__ == "__main__"  :  
    s = raw_input()
    print Solution().lengthOfLongestSubstring(s)   

我们可以看到两个的复杂度变化:

1 2

 

标签:

0

老师给13级的一封信,赞!

Posted by 梓权 on 2016年6月2日 in 大学 |

致本年度选修数据挖掘课程学生的一封公开信

同学们:
这是一封早就应该完成的信,有许多内容我早就不吐不快,但是我没有去写,没有去说。不是我不想,而是我知道你们非常讨厌一个空洞的说教者。所以,我在等待,等待你们来自真实学习过程的体会感受,等待你们对自己大学生活和学习方式的思考。在已经完成了两次作业的时候,我觉得,这封信可以写了,这些话可以说了,我相信你们应该有了和我的某种共同的感受,思想应该可以达到一种深度。
今年,选修这门课程的学生近一百人,但是在各次作业中表现优异者不超过一半,对于这种教学效果,我觉得很遗憾,因为在我的印象中,所有的学生都是经历过高三刻骨铭心的煎熬后,才能作为各中学的佼佼者来到广州大学城,并顺利选择华师的电子通信专业的。但事实上,从这门课程的大作业报告过程中,确实发现很多同学身上没有任何紧张,投入,为了自己的目标拼命的感觉,因此在这几次比较苍白无力的过程中,这部分同学已经丧失了一次铸炼自己的机会,也必然会在课程作业的报告过程中把自己的不在乎、不投入和不作为暴露得淋漓尽致。有些团队报告过程中翻来覆去只会背诵文献摘要中几句观点,一旦问到具体原理就目瞪口呆;有的人连数据是什么格式都一无所知,一看可知是根本没有看过数据,更遑论运行程序;有的人则是到了期末才发现走投无路,临时求爷爷,告奶奶,终于挤进其它团队中以求过关。
请问这部分同学,在这一学年当中,你是不是有许多时间都不知所措?有许多时间都用在QQ上无意义的闲聊?有许多时间都投入到网络游戏里无止境的厮杀?一学年过去了,是否突然发现自己还没有认真听过几节课,突然发现自己没有认真读过几本书,突然发现自己没有根本学到东西?临近期末,每天你是不是正在为期末考试过关,而不是达到优秀而发愁,正在盘算不会挂科的各种方法:突击学习,考试作弊,祈求上帝……
在我印象中,你们大多数都是来自农村,没有多少人是官二代或者富二代,你们现在用的每一分钱都是父母挣来的血汗钱,其间蕴含着无比的艰辛与亲情。在他们被岁月留下创痕的脸上,还有对你们充满希望的眼睛,在他们被时光打磨砥砺的心里,始终对你们抱有无比的信心。但是,你们父母的殷殷期盼和高额投入,在你们的身上得到了多少回报与产出,在一学年结束之际又让他们体会到多少欣慰与幸福?
希望可以变成失望,失望可以变成绝望,但是谁又是这一变化的决定者?不要说上课听不懂,不要说对专业不感兴趣,不要说教师不管你们,堕落不需要理由,只需要借口。
责任,并不是别人给你的,而是自己成熟的思想内定的。大学生都喜欢说自己长大了,都愿意认为自己成熟了,但在我看来,很多的学生还只是一种表象的成熟。虽然你们对自己对父母都具有永远无法推卸的责任,但是你们却在无为与堕落当中放弃了承担的使命。
在学习中,许多同学都反映到这样一个问题:不知道自己一天到底要做什么,或是做什么都不起劲,其实就是因为你们丧失了目标。其原因如下:
第一:你们考上了大学。完成了你们在小学、初中、高中的终极目标。对于许多同学而言,大学是你们最后的求学阶段。读完大学就要找工作,可是这对于已经做了十二年学生的你们而言仍然显得那么的遥不可及,所有的问题和危机似乎都还没有进入你们的视野。
第二:大学里的教学方式与其它时期的教学方式完全不同。在大学里面没有任何一个教师会围绕你们转,生怕你们没有学到东西,学不学完全是自己的事,你们已经是成年人了。没有了以前的反复讲解,没有了以前做不完的作业你们觉得上课对自己空荡荡的,学了又怎么样,不学又怎么样?与其让自己学得这样辛苦,还不如让自己过得洒脱一点。
第三:大学里面有太多属于自己的时间。从以前的早自习到晚自习,都有老师把你们要完成的任务布置的妥妥当当,到现在的没有任何人给你讲你应该去做什么,让你们觉得茫然不知所措。你们大多数人却乏精神的独立与良好的自控能力。
第四:你们大多数人缺乏清晰、明确的人生目标。到底要做怎样的人,到底要干什么样的事业,这些对于你们而言是毫无概念,也缺乏经验。
正是这几点因素的综合作用让你们丧失了目标。但是,没有方向的船,什么风都不是顺风。
在这里我给你们一个建议,希望能帮助你们明确定位,找到目标。
第一步:抛开所有的浮躁,从理想,兴趣出发,也结合自己的能力和特长,想想自己以后到底要做怎样的工作,或是怎样的事业。找一张白纸,把自己最终的决定记录下来,请不要犹豫不决。数据分析师?网页设计师?软件开发工程师?通信工程师?……
第二步:利用网络,人才市场招聘启示等渠道充分了解从事你定下的工作所需的专业技能和其它技能。这些技能的理论知识大多数是从书本上学来的,你需要做的是按从基础到精深的顺序给自己列出一个学习的书录。这个也请你写在纸上。
第三步:按书录的先后给自己分配学习时间。当然,你能分配的大多数是属于自己的课余时间。并且将它落实到每一学期当中,让自己每学期都有一个学习计划。
第四步:按着学习计划,脚踏实地去学习,并且利用一切可能利用的条件去实践。
我相信,如果每一个同学都有一个目标,你们会过得很充实,会过得很忙碌,并且会得到很多。所以,请每一个同学都给自己定下一个目标吧。
生活就像巧克力盒,你永远都不知道下一颗会是什么样的滋味!其实在上面四步中,一、二、三步都是非常容易实现的,最难的是第四步, 要做到确实不容易。
首先,在你们的身边有太多的混日子的大学生,他们过着同龄人向往的潇洒生活,要做到第四点,你们需要克服大环境的影响。
其次,大学里有太多的诱惑。QQ里又发出了让人手痒的声音;网络游戏里又出了让人觉得兴奋无比的厮杀声;湖边的路灯下又站着一对对相互依偎的情侣;牌桌前又摆满了好像可以唾手可得的钞票……要做到第四点,你们需要拒绝这些诱惑,在别人眼里像苦行僧一样在大学里穿行,耐得住孤独与寂寞。
痛苦、伟大、新生的过程。人生,难道不是一样吗?
也许有的人会这样问:为什么别人可以潇洒地生活,而我却要痛苦的拼搏。我把它换成另外一个问题:读大学到底是享受生活还是塑造自我。
我想请问每位同学,以后你到底凭什么在社会上立足?要权力没权力,要关系没关系,要钞票没钞票,那到底还有什么呢?大学毕业初期,你们要么从事管理工作,要么从事技术工作。但是你没有权力,没有关系,没有钞票,要想从事多么好的管理工作,要想得到四位数以上的月薪,难道不是南柯一梦吗?你最好的选择是从事技术工作,但是这需要真材实料,可不凭谁权力大,关系硬,钞票多。
可是当很多人大学毕业以后,却突然发现自己除了拿到了一个大学毕业证之外,除了能在吹牛时说几个好像很深奥的话题之外,并没有学到真正过硬的本事时,你们还有信心和底气去要求高薪稳定的工作和令人艳羡的社会地位吗?如果你作为一名211高校的毕业生,能做的事情和一名普通中专技校学生没有任何区别,甚至实践动手能力还差得远,到那时你们是不是还要怨天尤人,诿过于社会?
我们每一个人都想过上高质量的生活,都想让自己的至亲过上无忧的生活,都想在世上留下体现自己价值的痕迹,但这些都不是在享受和放纵中就可以实现的。上天给了我们每个人一双手和一个大脑,就是要让我们去创造与思考。大学这段时间是你们最佳的学习时间,所以请你们暂时推迟享受,努力地重塑自我,为以后的腾飞积聚力量,为将来的发展积累资源,把大学四年作为修炼,而非休息,把大学城作为竞技场,而非游乐场。
大学四年,看起来很长,实际上很短,人生也是如此。希望每位同学无论这次课程中体会到多少,都能够在未来的学习和工作中积极主动的面对问题,承担责任,把这门课程上学到的知识与技能,体会到的过程和方法论应用到自己未来的成长过程中,我期待在未来的大数据浪潮中能看到华南师大的学生勇立潮头,乘风破浪!
华南师范大学薛云,胡晓晖
2016年6月于广州大学城

7348dc3ad2058733

标签:

2

一个基于深度学习的Flask网页界面

Posted by 梓权 on 2016年5月25日 in Python, 数据挖掘 |

这次的数据挖掘作业主要做了一个情感分析的应用,模型当然是基于神经网络。

不过准确率没想象中高,74%,还可以改进

源程序分为“内核”和“界面”两个方面。

内核方面:

  1. Word2vec最终训练的维度有256维
  2. 神经网络是普通的全连接网络,有5层,分别有256,256,128,64,1个节点
  3. Word2vec的训练5,6个钟的时间,情感分析的网络也要6个钟
  4. 程序框架如下:
    1. dataProcess.py 用于数据预处理,把来自豆瓣的评论按照10:1来进行训练和测试。
    2. word2vec.py 把每个评论进行分词以及向量化,保存模型。
    3. sentiment_model.py 构造全连接神经网络模型,把10份的数据进行训练,保存训练后的模型。
    4. 模型测试以及一些应用。

界面方面:

  1. views.py 视图函数,负责接受输入框的值以及切换网页。
  2. errors.py 出错返回404,505网页。
  3. templates 前端的网页。
  4. sentiment_model 情感模型文件
  5. word2vec_model word2vec模型文件
  6. 其他py文件来自来内核。

 

github 项目:https://github.com/zzq2015/deeplearningWeb

标签:, ,

0

2.add two numbers

Posted by 梓权 on 2016年5月23日 in LeetCode |

算法:

  1. 初始化一个指向链表头的节点
  2. 初始化进位为0
  3. 初始化两个节点p,q分别指向l1和l2
  4. 循环,直达两个链表的尾部:

x 保存p的值,y保存q的值,一达到尾部,x,或者y就设0.

sum = x+y+carry

carry = sum/10

建立一个新节点,值为(sum%10),把他设为当前节点的下一个,并且把他当成当前节点

p,q也跟着移到下一个节点

5. 判断carry是否为1,是的话添加一个新的节点(值为1)

6,返回头节点

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        head = ListNode(0)
        curr = head #指向同一个节点
        p = l1
        q = l2
        carry = 0
        while ( p != None ) or( q != None ):
            x = p.val if p else 0
            y = q.val if q else 0
            sum = x + y +carry
            carry = sum/10
            curr.next = ListNode(sum%10)
            curr = curr.next
            if(p != None): p = p.next #判断是否为空,空的话不必再找下一个节点
            if(q != None): q = q.next
        if carry > 0:
            curr.next = ListNode(carry)
        return head.next

 

 

标签:,

0

一个有趣的自动化项目

Posted by 梓权 on 2016年5月22日 in Python |

这是伯乐在线去年一篇热文来镇楼:《超过 90 秒的任务不自动化,你好意思说自己是黑客?》。

说一个家伙简直就是生活在终端里面。如果某些事情,甚至可以说是任何事情,哪怕只需要花费他超过 90 秒的时间,那他会写脚本来自动处理那些事情。

像这样的大神我们是没什么机会接触了,但是我们可以看看他的代码呀

  1. smack-my-bitch-up.sh:给他老婆发一条的短信,大概意思是“晚上要加班”。从一个字符串数组中自动随机地提取理由。运行在一个定时任务里面。如果晚上 9 点之后,服务器上还有他登录的有效 SSH 会话,那就会触发这个定时任务。
  2. kumar-asshole.sh:从电子邮件的收件箱里扫描“Kumar”(他是我们一个客户的数据库管理员)。查找像“help”、“trouble”、“sorry”等这样的关键字。 如果找到了,那么脚本会 SSH 连接登录到客户服务器,并且将数据库回滚到最新的备份。然后发送一条回复:“别担心,兄弟。下次小心点。”
  3. hangover.sh:另一个定时任务被设置成特定的时间。自动发送类似“感觉不舒服、要在家里工作”这样的电子邮件。从另一个定义好的字符串数组中,选取一个随机的“理由”。如果在早上 8:45 前,服务器上没有交互的 session,就会触发该定时任务。
  4. fuckingcoffee.sh:这个脚本会等待整整 17 秒(!),然后打开一个 SSH 会话,连接我们的咖啡机(我们完全没有想到咖啡机会连网、上面运行着 Linux、 后台还执行着 SSHD),接着给它发送一些稀奇古怪的命令。这看起来很有极客范。完成这些之后,咖啡机会开始煮一杯中号的 half-caf 拿铁咖啡,再等待 24 秒(!)就可以把咖啡倒入杯中。这个时间恰恰是那家伙从他的座位上走到咖啡机所用的时间。

看完以后我的感觉。。。。。幸运的是这会就有Python版本的了

标签:

0

定制类的方法

Posted by 梓权 on 2016年5月6日 in Python |

今天NIOT的面试官问我object有哪些方法,我一时只想到两个,在此总结一下。
1.`__str__`
可以在print的时候打印出我们想要对象显示的信息:

>>> class Student(object):
...     def __init__(self, name):
...         self.name = name
...     def __str__(self):
...         return 'Student object (name: %s)' % self.name
...
>>> print Student('Michael')
Student object (name: Michael)

2.`__repr__`
打印出我们想要直接敲对象显示的信息:

class Student(object):
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student object (name=%s)' % self.name
__repr__ = __str__
>>> s = Student('Michael')
>>> s
Student object (name: Michael)

3.`__getitem__`
&#160;&#160;&#160;&#160;让对象像list那样按照下标取出元素

class Fib(object):
def __getitem__(self, n):
a, b = 1, 1
for x in range(n):
a, b = b, a + b
return a
>>> f = Fib()
>>> f[0]
1
>>> f[1]
1
>>> f[2]
2

4.`__setitem__`
像dic一样赋值

>>> class testsetandget:
kk = {};
def __getitem__(self, key):
return self.kk[key];
def __setitem__(self, key, value):
self.kk[key] = value;

>>> a = testsetandget()
>>> a['first'] = 1
>>> a['first']
1

5.`__getattr__`
返回一个属性,只有在没有找到属性的情况下,才调用__getattr__,已有的属性

class Student(object):

def __init__(self):
self.name = 'Michael'

def __getattr__(self, attr):
if attr=='score':
return 99
>>> s = Student()
>>> s.name
'Michael'
>>> s.score
99

6.`__call__`
定义一个__call__()方法,就可以直接对实例进行调用

class Student(object):
def __init__(self, name):
self.name = name

def __call__(self):
print('My name is %s.' % self.name)
>>> s = Student('Michael')
>>> s()
My name is Michael.

7.`__cmp__`
用这个可以控制sorted排序依据

class num(object):
def __init__(self, number):
self.number = number
def __cmp__(self, other):
if self.number > other.number:
return -1
elif self.number < other.number:
return 1
else:
return 0

def __str__(self):
return '(%s)' % (self.number)

__repr__ = __str__

one = num(1)
two = num(2)
l = [one,two]
print sorted(l)

 

有了这些,对这object也有底气了把……^-^

标签:

0

堆排序(python实现)

Posted by 梓权 on 2016年4月24日 in 算法与数据结构 |
2016-04-24 19-19-22屏幕截图

一、介绍堆排序的原理
—————————
堆是一种完全二叉树的结构。但是堆又比它多出一个特性:
即:大堆的父结点比子节点都大,小堆的父节点比子节点都小

但是如果我们写成数组的话就是[20,17,8,7,16,3],虽然我们可以得到整个树的最大值。我们还得再进行排序的编写。

堆排序的步骤:
第一步,把一堆数据先变成一个大堆
如[20,17,8,7,16,3]
第二步,把堆顶跟最后一个交换
如[3,17,8,7,16,20]
第三步,除去最后一个(即最大值)后的树再变成大堆
即把[3,17,8,7,16]变成大堆
不断循环上面的步骤,直到最后只有一个点要做成大堆

个人理解也就是加强版的选择排序,只不过以前是从一个数组里选出一个最值存起来,这样去遍历,直到取出所有值。现在是在不断变成大堆,直接拿出第一个放到最后,也是遍历完所有树。当然通过树是肯定比数组优化啦。复杂度自然是跟树深度和节点数成正比:O(nlog(n))

二、python实现


    #coding:utf-8

    def compare(data,left,right):
        if data[left] > data[right]:
            return left
        else :
            return right

    def swap(data,left,right):
        tmp = data[left]
        data[left] = data[right]
        data[right] = tmp

    def build_tree(data,last_index):
        p = (last_index-1)/2
        print p
        for i in range(p,-1,-1):
            #把父结点以及他的孩子中最大值移到父节点的位置
            left,right = 2*i+1,2*i+2
            if (left < last_index):#有两个子结点的情况
                max_node = compare(data,left,right)
                max_node = compare(data,max_node,i)
                if (max_node!=i):
                    swap(data,max_node,i)
            if (left == last_index):#有一个左节点的时候
                max_node = compare(data,left,i)
                if (max_node != i):
                    swap(data,max_node,i)

    def loop_build(data,last_index):
        for last in range(last_index,-1,-1):
            build_tree(data,last)
            swap(data,0,last)
            print '调整中:',data

    data = [20,17,8,7,16,3]
    print "before:",data
    loop_build(data,len(data)-1)
    print "after:",data

2016-04-24 19-19-22屏幕截图

标签:

0

腾讯一面

Posted by 梓权 on 2016年4月10日 in 面试 |
tencent

今天去腾讯面试,心里想着这次以后很有可能就不会再去啦,怎么也要记录下来。首先,他通知的比较急,昨晚7点才看到短信。于是赶紧打印了简历,也没来的急准备什么。整个人有点紧张。早上醒来下着大雨,我跟另一个人约好后就去搭地铁。上了酒店的免费车就到了酒店,很顺利拿到面试卡。

tencent

1.他让我总结项目是怎么做出来的,一开始我答的都不是他要的,一方面是我只讲我怎么实现,另外是我觉得这个项目很水。后来他就直接说要是我来腾讯,要我也做相同的项目,我会怎么结合题目里的东西。然后我举了一个例子说,有两个用户,他们的评论里都有同样的实体,由此可以对他们做相关度计算,他这才放过。
2.他问我这个是针对什么情况的。我一开始说我们用的语料是评论蒙牛的。后来我想不对,这个项目是吧评论和评分结合起来,哪有对蒙牛的评分,我就说是电影imdb上的评论。他说权重是多少,其实我们最后还没有做到这个。但是我说7:3,也不知道他相不相信。
3.问我怎么把一些数学上的指标形象生动的反映给老板看。我就说我们实验室报告都会举个例子。我说我们实验里有4个指标。提到啦F值。然后我想举个相关度的例子。他看出我对F值不熟,就让我举个F值的例子。然后我凭自己对F值的公式说是方差之比,现在看来好像说错了,不是同一个F值(实验测试的指标F值  = 正确率 * 召回率 * 2 / (正确率 + 召回率) (F 值即为正确率和召回率的调和平均值))
4.他问我知道什么大数据工具,我说python spss hadoop spark,我本来想说我会搭Hadoop,可是他又没问下去。
5.说国内有哪些公司在深度学习 大数据做的好。我想到百度,我就说百度的图片有用图片搜图片的功能,挺好的。他问我里面用到什么模型。这个我哪里知道,百度又不公开。我只是说cnn可以做这个方面的。

还有一些琐碎的问题,比如你的职业发展。我最后问他我数学不好,大数据又需要很深的算法功底,我在考虑要不要干脆转Python。他说了一大推,总之叫我坚持。
不管怎么说,面试官是nice的,今天也收获很多,美好的一个经历。^-^

标签:

Copyright © 2016 郑梓权 All rights reserved.
This site is using the Desk Mess Mirrored theme, v2.5, from BuyNowShop.com.