python 中一些函数的含义:
1 tile
例:
(1)
a = array([0, 1, 2])
b = tile(a, 2)
print(b)
//结果为
[0, 1, 2, 0, 1, 2]
(2)
a = array([0, 1, 2])
b = tile(a, (2, 1))
print(b)
//结果为
[[0, 1, 2],
[0, 1, 2]]
2 **
a
*
*
2
=
=
>求a的平方
a
*
*
3
=
=
>求a的立方
3 sum axis
sum应该是默认的axis=0 就是普通的矩阵或者数组对应相加
而当加入axis=1以后就是将一个矩阵的每一行向量相加
c = np.array([[0, 2, 1], [3, 5, 6], [0, 1, 1]])
print c.sum()
print c.sum(axis=0)
print c.sum(axis=1)
结果分别是:19, [3 8 8], [ 3 14 2]
(2)keepdims
import numpy as np a = np.array([[1,2],[3,4]])
# 按行相加,并且保持其二维特性
print(np.sum(a, axis=1, keepdims=True))
# 按行相加,不保持其二维特性
print(np.sum(a, axis=1))
结果:
array([[3], [7]])
array([3, 7])
4 argsort
argsort函数返回的是数组值从小到大的索引值
>>> x = np.array([3, 1, 2])
>>> np.argsort(x)
array([1, 2, 0])
>>> x = np.array([[0, 3], [2, 2]])
>>> x
array([[0, 3],
[2, 2]])
>>> np.argsort(x, axis=0) #按列排序
array([[0, 1],
[1, 0]])
>>> np.argsort(x, axis=1) #按行排序
array([[0, 1],
[0, 1]])
>>> x = np.array([3, 1, 2])
>>> np.argsort(x) #按升序排列
array([1, 2, 0])
>>> np.argsort(-x) #按降序排列
array([0, 2, 1])
>>> x[np.argsort(x)] #通过索引值排序后的数组
array([1, 2, 3])
>>> x[np.argsort(-x)]
array([3, 2, 1])
二、
书中第一个程序的代码:
from numpy import *
import operator
def createDataSet():
group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1], [0.9,0.9]])
labels = ['A', 'A', 'B', 'B', 'A']
return group,labels
group,labels = createDataSet()
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]
diffMat = tile(inX, (dataSetSize, 1)) - dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
sortedDisIndicies = distances.argsort()
classCount = {}
print(sortedDisIndicies)
for i in range(k):
voteIlabel = labels[sortedDisIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
print(classify0([0,0],group,labels,3))
书中有一处 classCount.iteritems(),报错,将其换成 classCount.items()
原因是:iteritems是为python2环境中dict的函数,我用的python3.6
三、
关于数据,链接:https://pan.baidu.com/s/1JcwnwBitChL01_sJnfb8CA
提取码:sx8x
四、
在约会网站预测函数代码中 raw_input在python3中已经不存在
Python3将raw_input和input进行整合成了input....去除了raw_input()函数....
其接受任意输入, 将所有输入默认为字符串处理,并返回字符串类型
percentTats = float(input("percentage of time spent playing video games?"))
五、
KNN算法在数据量很大的时候,效率较低。为了改进,《统计学习方法》中对应的章节有kd树方法。