Python机器学习
上QQ阅读APP看书,第一时间看更新

2.1 为什么选择Python

Python在数据科学家中是非常受欢迎的编程语言。第一,它免费且易学,不必为了小任务而浪费大量注意力;第二,它是面向对象的语言,这也是其被大型开发者社区支持的原因;第三,巨大的开源库支持。 Python具有相当数量的开源库,能够更迅速地实现数据科学和机器学习解决方案,而无须从头开始编写每一个算法。像Pandas、 scikit-learn、 SciPy、 NumPy、 Keras这样的库对于快速实现机器学习算法非常有用。

首先,通过一个例子了解如何使用编程语言来解决现实世界的问题。

假设举办一个聚会。你为每个进入聚会的人分配一个唯一的1~100之间的号码。现在聚会结束了,你宣布了一个消息。

“会从1~200之间获取一个随机数。如果有两个人的号码之和与这个数字相等,就会奖励这两个人。”

现在了解到,已经向x个人分配了号码。如何确定能否给其中两个人奖励呢?

可以尝试使用Python来解决这个问题。首先,从列表中获取输入数据。

numberList = list([43,23,1,67,54,2,34,56,23,65,12,9,87,4,33])

现在选择一个随机数并将其存储在一个变量中。

sumSelector = raw_input()

为了解决这个问题,必须先对数据进行排序。在Python列表中排序很简单,可以通过sort函数来完成。

numberList = numberList.sort()

通过上述语句,将排序后的数字赋值给变量。现在使用两个指针:一个指向开始处(前指针);另一个指向结束处(后指针)。检查两指针所指变量的和。如果和小于给定值(意味着当前的总和小于所需的总和),前指针向前移动一步并再次检查;如果和大于给定值(意味着当前的总和大于所需的总和),将后指针向后移动一步并再次检查。无论在任何位置,如果当前的总和等于要求的总和,便可以说,存在两个人的数值之和与给定的数值相同,需要给予奖励;如果两个指针相交并且仍然没有达到所需的总和,则可以声称并不存在两个人的数值之和与给定的数值相等。

以下是完整的解决方案[1]

def isPrizeGiven(numberList,sumSelector): 
sumOfTwo = sumSelector 
    i=0 
    j = len(numberList) -1 
    if(i>=j): 
        return False 
    while(i<=j): 
        currentSum = numberList[i]+numberList[j] 
        print(i,j,currentSum) 
        if(currentSum==sumOfTwo): 
            return True 
        if(currentSum>sumOfTwo): 
            j=j-1 
        else: 
            i=i+1 
    return False

为获得所需答案,必须向函数传递排序列表和给定的数值(即两数值的期望和)。

if (isPrizeGiven(numberList,sumSelector): 
    print("No Escape. Give Prize to Everyone") 
else: 
    print("You Saved Yourself!!")

即使现在不能理解此代码,也不要担心。接下来我们还会对这段代码进行解析,并介绍程序设计语言的基本原理。