K-Nearest-Neighbors

K-Nearest Neighbor

1. 基础知识

tile

  • 这个函数在numpy中

  • 函数形式:tile (A, reps)

  • 重复A的各个维度,reps是重复的次数

from numpy import tile
Array = [1,2,3]
y = tile(Array,2)

输出为:

[1 2 3 1 2 3]

y = tile(Array,(2,2))

这个相当于先得到 [1 2 3 1 2 3],再重复

输出为:

[[1 2 3 1 2 3]
[1 2 3 1 2 3]]

y = tile(Array,(2,2,2))

输出为:

[[[1 2 3 1 2 3]
[1 2 3 1 2 3]]

[[1 2 3 1 2 3]
[1 2 3 1 2 3]]]

张量 (tensor)

张量可以和之前学的矢量和矩阵相联系。

  • 0阶张量是一个数
  • 1阶张量是一个矢量(vector),计算机中就可以用一位数组表示
  • 2阶张量是一个矩阵
  • ……

下面是一个3阶张量:

[
[[9,1,8],[6,7,5],[3,4,2]],
[[2,9,1],[8,6,7],[5,3,4]],
[[1,5,9],[7,2,6],[4,8,3]]
]

中间的每一行都是一个矩阵(2阶张量)

另外,3阶张量又叫”空间矩阵“或者”三维矩阵“,例如:

img

shape[n]

n表示的是张量的第n+1维元素的个数。

在矩阵中

  • shape[0] 表示行数
  • shape[1] 表示列数
Matrix = np.matrix([[1,2,3,4],
                    [2,3,4,5],
                    [1,4,5,6]])

Matrix.shape[0] = 3

Matrix.shape[1] = 4

* 与 dot()

这两个运算都在numpy中。对于两个矩阵

  • a*b表示两个矩阵对应位置的元素相乘。同样的,a**就表示该矩阵中每个元素都平方
  • dot)()是点积(inner product)。dot(a,b)表示两个矩阵相乘,也可以用a.dot(b)

sum(axis=n)

对某个维度求和。

Matrix = np.matrix([[1,2,3,4],
                    [2,3,4,5],
                    [1,4,5,6]])
Sum_0 = Matrix.sum(axis=0)

输出为:

[[ 4 9 12 15]]

Matrix = np.matrix([[1,2,3,4],
                    [2,3,4,5],
                    [1,4,5,6]])
Sum_1 = Matrix.sum(axis=1)

输出为:

[[10]
[14]
[16]]

argsort()

将一个数组有小到大排序,并提取每个元素对应的索引(index)。

Array = np.array([5,4,3,2,1])
Index = Array.argsort()

输出为:

[4 3 2 1 0]

argsort()也可以作用到矩阵上。

Matrix = np.matrix([[1,2,3,4],
                    [2,3,4,5],
                    [1,4,5,6]])
Index = Matrix.argsort()

输出为:

[[0 1 2 3]
[0 1 2 3]
[0 1 2 3]]

可见argsort()是以数组为单位对矩阵进行处理的。

dict.get()

函数形式:get(key, default)

对于一个字典dict,调用get()。如果key存在,则返回其对应的value;如果不存在,则返回default的值。

Dict = {
   'name':'Francis','age':19}
print(Dict.get('name','No such key!'))
print(Dict.get('gender','No such key!'))

输出为:

Francis
No such key!

items()和iteritems()

  • dict.items()可以生成一个以(key, value)为元素的列表。

  • dict.iteritems()与items()类似,但生成的是一个迭代器。迭代器在遍历时很方便。

但注意iteritems()在python 3中已经被废除,它可以用for循环和items()实现。

Dict = {
   'name':'Francis','age':19,'gender':'male'}
List1 = Dict.items()
print(List1)

输出为:

dict_items([(‘name’, ‘Francis’), (‘age’, 19), (‘gender’, ‘male’)])

sorted()

从小到大排列列表。

函数形式:sorted(list, key, reverse)

  • list就是要进行排序的列表
  • key用来指定排序逻辑
  • reverse来指定是否逆序
List = ['Francis','Jack','Marry','Smithson']
y = sorted(List,key=len,reverse=False) #注意这里用的是key=len,而不是len()
print(y)

输出为:

[‘Jack’, ‘Marry’, ‘Francis’, ‘Smithson’]

operator.itemgetter()

operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号)。

List = ['Francis','Jack','Marry','Smithson']
function = operator.itemgetter(1)
print(function(List))

输出为:

Jack

2. 引例

导入库

from numpy import *
import operator

创建dataset

def creatDataSet():
    group = array([[1.0,1.1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值