zoukankan      html  css  js  c++  java
  • numpy 维度与轴的问题

    0. 多维数组的显示问题

    >> X = np.reshape(np.arange(24), (2, 3, 4))
    
        # 也即 23 列的 4 个平面(plane)
    
    >> X
    array([[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]],
    
           [[12, 13, 14, 15],
            [16, 17, 18, 19],
            [20, 21, 22, 23]]])
    

    再来分别看每一个平面的构成:

    >> X[:, :, 0]
    array([[ 0,  4,  8],
           [12, 16, 20]])
    
    >> X[:, :, 1]
    array([[ 1,  5,  9],
           [13, 17, 21]])
    
    >> X[:, :, 2]
    array([[ 2,  6, 10],
           [14, 18, 22]])
    
    >> X[:, :, 3]
    array([[ 3,  7, 11],
           [15, 19, 23]])

    也即在对 np.arange(24)(0, 1, 2, 3, ..., 23) 进行重新的排列时,在多维数组的多个轴的方向上,先分配最后一个轴(对于二维数组,即先分配行的方向,对于三维数组即先分配平面的方向)

    1. None 索引 ⇒ 升维

    >> A = np.random.rand(2, 3)
    >> A.shape
    (2L, 3L)
    >> A[None, :].shape
    (1L, 2L, 3L)
    >> A[None, :, :].shape
    (1L, 2L, 3L)

    2. np.apply_along_axis

    这是一个强大的函数,在指定轴上,按指定的函数进行操作;

    >>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
    >>> np.apply_along_axis(np.diff,0,b)
                                # 在列方向进行差分的动作
    array([[3, 3, 3],
           [3, 3, 3]])
    >>> np.apply_along_axis(np.diff,1,b)
    array([[1, 1],
           [1, 1],
           [1, 1]])
    
    >>> b = np.array([[8,1,7], [4,3,9], [5,2,6]])
    >>> np.apply_along_axis(sorted, 1, b)
    array([[1, 7, 8],
           [3, 4, 9],
           [2, 5, 6]])

    这个函数真正的意义在于什么,除了更精细化,customized的处理行和列外,它对一些不具备axis参数的函数,使其具备逐行或者逐列处理的能力 np.bincount(),而不必逐行逐列地进行遍历。

    P = np.asarray([clf.predict(X) for clf in self.classifiers_])
    maj_vote = np.apply_along_axis(lambda col: np.argmax(np.bincount(col, weights=self.weights)), axis=0, arr=P)
  • 相关阅读:
    HTML DOM 12 表格排序
    HTML DOM 10 常用场景
    HTML DOM 10 插入节点
    HTML DOM 09 替换节点
    HTML DOM 08 删除节点
    HTML DOM 07 创建节点
    022 注释
    024 数字类型
    005 基于面向对象设计一个简单的游戏
    021 花式赋值
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9422417.html
Copyright © 2011-2022 走看看