liuyubobobo《机器学习》学习笔记(五)

numpy和matplotlib (2)


1.矩阵运算
  • 运算符:+、-、*、/、//、**、%……

  • abs()

  • sin() cos() tan()

  • exp() log()

  • power() log2() log10()

  • dot() 矩阵乘法

    A * B 只是矩阵各位置相乘,A.dot(B) 才是矩阵乘法

  • A.T 转置

  • inv() 逆矩阵

    A
    # array([[0, 1],
    #        [2, 3]])
    np.linalg.inv(A)
    # array([[-1.5,  0.5],
    #        [ 1. ,  0. ]])
    
  • pinv() 伪逆矩阵 (不要求是方阵)

    C
    # array([[0, 1, 2],
    #        [3, 4, 5]])
    D = np.linalg.pinv(C)
    # array([[-0.77777778,  0.27777778],
    #        [-0.11111111,  0.11111111],
    #        [ 0.55555556, -0.05555556]])
    C.dot(D)
    # array([[ 1.00000000e+00, -4.16333634e-17],
    #        [ 5.55111512e-16,  1.00000000e+00]])
    
2.聚合运算

聚合:把一组值变成一个值

  • sum()

    X = np.arange(16).reshape((4, 4))
    np.sum(X)
    # 120
    np.sum(X, axis=0)
    # array([24, 28, 32, 36])
    np.sum(X, axis=1)
    # array([ 6, 22, 38, 54])
    
  • max() min()

  • prod() 求积

  • mean() 均值

  • median() 中位数

  • percentile() 百分位数

    L = np.array(np.random.random((10, 10)))
    np.percentile(L, q = 50)
    # 0.4706891049878974
    for percent in [0, 25, 50, 75, 100]:
        print(np.percentile(L, q = percent))
    # 0.0013510975813705306
    # 0.18301899481429829
    # 0.4706891049878974
    # 0.7229884292204094
    # 0.9879405960925149
    
  • var()方差 std()标准差

3.arg运算
  • argmin() argmax() 最小(大)值的索引

    x = np.random.normal(0, 1, size = 1000)
    np.min(x)
    # -2.949169178250681
    np.argmin(x)
    # 42
    x[42]
    # -2.949169178250681
    
  • sort()

    X
    # array([[5, 8, 9, 3],
    #        [5, 5, 4, 8],
    #        [3, 1, 8, 5],
    #        [9, 3, 4, 7]])
    np.sort(X)   # 同np.sort(X, axis=1)
    # array([[3, 5, 8, 9],
    #        [4, 5, 5, 8],
    #        [1, 3, 5, 8],
    #        [3, 4, 7, 9]])
    np.sort(X, axis=0)
    # array([[3, 1, 4, 3],
    #        [5, 3, 4, 5],
    #        [5, 5, 8, 7],
    #        [9, 8, 9, 8]])
    
  • argsort() 排序后每个数在原数组中的索引

    x
    # array([ 4, 10, 14,  8,  9, 12,  1,  6,  1,  6, 11,  3, 10, 10, 10,  2])
    np.argsort(x) # 索引为6的数排到第一位
    # array([ 6,  8, 15, 11,  0,  7,  9,  3,  4,  1, 12, 13, 14, 10,  5,  2],
    #       dtype=int32)
    
  • partition()

    np.partition(x, 6)    # 小于6的排在6前面,大于6的排在6后面
    # array([ 1,  2,  3,  1,  4,  6,  6,  8,  9, 10, 10, 10, 10, 11, 14, 12])
    
  • argpartition()

    np.argpartition(x, 6)
    # array([ 6, 15, 11,  8,  0,  9,  7,  3,  4, 14, 13,  1, 12, 10,  2,  5],
    #       dtype=int32)
    
4.Fancy indexing
x = np.arange(16)
# 取索引为3,5,8的值可以
[x[3], x[5], x[8]]
# 也可以
ind = [3, 5, 8]
x[ind]
ind = np.array([[0, 2],
                [1, 3]])
x[ind]

# 矩阵类似
X = x.reshape(4, -1)
row = np.array([0, 1, 2])
col = np.array([1, 2, 3])
X[row, col]           # 取(0, 1), (1, 2), (2, 3)三个点
# array([ 1,  6, 11])

# 另一种方法
col = [True, False, True, True]
X[1:3, col]
# array([[ 4,  6,  7],
#        [ 8, 10, 11]])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值