numpy-matrix[, : ]矩阵逗号冒号用法以及np.sum的axis参数

在看机器学习实战时,kNN里面有段关于矩阵的处理,那简直666啊。。。

查了一下利用Python进行数据分析 ,发现里面没有详细提到此用法。故简单做一个总结:

具体代码如下:

 
 
import numpy as np
for i in range(numTestVecs):
        #前numTestVecs个数据作为测试集,后m-numTestVecs个数据作为训练集
        classifierResult = classify0(normMat[i,:], normMat[numTestVecs:m,:],
            datingLabels[numTestVecs:m], 3)
        print("分类结果:%d\t真实类别:%d" % (classifierResult, datingLabels[i]))
        if classifierResult != datingLabels[i]:
            errorCount += 1.0

classify0方法里面的参数矩阵的意思

例如 testMat = np.array([ [1,2,3,4],

                           [5,6,7,8],

                           [9,9,0,0] ])   或者用np.mat()

这是一个3*4的矩阵 testMat.shape[0] 返回行数3, testMat.shape[1] 返回列数4。

testMat[0, : ]  返回[1, 2, 3, 4], 表示返回的是第0行(下标0开始)的所有数据 (行向量)

testMat[0:2, :  ] 返回的是 前两行[[1 2 3 4]

                                                     [5 6 7 8]] 表示第0行 和 第1行的所有数据,(下标0,1,不包含2。左闭右开区间),为一个2*4的矩阵。

同理,testMat[0:2, 1:3] 返回的是 [[2 3]

                                                     [6 7]],在上面的基础上取其第1,2列(下标0开始)

testMat[:, 1:3] 返回[  [2 3]
                                 [6 7]

                                 [9 0] ]   就是第1,2列(下标0开始)

故:

classify0(normMat[i,:], normMat[numTestVecs:m,:], datingLabels[numTestVecs:m], 3)

第一个参数是normMat矩阵的第i个行向量,第二个参数是此矩阵[numTestVecs, m]左闭右开区间的的所有行组成的矩阵

第三个参数是标签行向量datingLabels的[numTestVecs, m]左闭右开区间的的所有元素组成的新的行向量

第四个参数是kNN里面的k值,就是取前k个最近邻的距离做下一步对比。

(numpy中默认都是行向量,没有列向量)

综上:

Mat[:,0]就是取矩阵Mat的所有行的第0列的元素,

Mat[:,1] 就是取所有行的第1列的元素。

Mat[:,  m:n]即取矩阵Mat的所有行中的的第m到n-1列数据,含左不含右。

Mat[0,:]就是取矩阵X的第0行的所有元素,

Mat[1,:]取矩阵X的第1行的所有元素。



np.sum( matirx )

a = np.mat([[1, 2, 3], [3, 2, 1]])
print(a)
[[1 2 3]
 [3 2 1]]
print(a.sum())  # 返回所有矩阵元素的和 此处返回12
print(a.sum(axis=0))

12
[[4 4 4]]

print(a.sum(axis=1))

[[6]
 [6]]

print(np.sum(np.array([[1, 2, 3], [3, 2, 1]]), axis=0))  # axis=0 表示列相加,得到行向量

[4 4 4]

print(np.sum(np.array([[1, 2, 3], [3, 2, 1]]), axis=1))  # axis=1 表示行相加,得到列向量
[6 6]

猜你喜欢

转载自blog.csdn.net/m0_38024592/article/details/79832415