numpy 维度与轴的问题

分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

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]]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

>> 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]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

也即在对 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

这个函数真正的意义在于什么,除了更精细化,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)
  • 1
  • 2

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

猜你喜欢

转载自www.cnblogs.com/siwnhwxh/p/10522599.html
今日推荐