numpy库函数

np.newaxis

索引多维数组的某一列时返回的是一个行向量

X = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
X[:, 1]
#array([2, 6, 10])    % 这里是一个行
X[:, 1].shape    % X[:, 1] 的用法完全等同于一个行,而不是一个列,
#(3, )

索引多维数组的某一列时,返回的仍然是列的结构,一种正确的索引方式是:

X[:, 1][:, np.newaxis]
#array([[2],
   [6],
   [10]])

如果想实现第二列和第四列的拼接(层叠):

X_sub = np.hstack([X[:, 1][:, np.newaxis], X[:, 3][:, np.newaxis]])      
          % hstack:horizontal stack,水平方向上的层叠
X_sub
#array([[2, 4]
   [6, 8]
   [10, 12]])

当然更为简单的方式还是使用切片:

X[:, [1, 3]]
#array([[ 2, 4],
    [ 6, 8],
    [10, 12]])

np.hstack()

  水平(按列顺序)把数组给堆叠起来

import numpy as np
a=[1,2,3]
b=[4,5,6]
print(np.hstack((a,b)))

输出:[1 2 3 4 5 6 ]

  

import numpy as np
a=[[1],[2],[3]]
b=[[1],[2],[3]]
c=[[1],[2],[3]]
d=[[1],[2],[3]]
print(np.hstack((a,b,c,d)))

输出:
[[1 1 1 1]
 [2 2 2 2]
 [3 3 3 3]]

vstack()

它是垂直(按照行顺序)的把数组给堆叠起来。

import numpy as np
a=[1,2,3]
b=[4,5,6]
print(np.vstack((a,b)))

输出:
[[1 2 3]
 [4 5 6]]

  

import numpy as np
a=[[1],[2],[3]]
b=[[1],[2],[3]]
c=[[1],[2],[3]]
d=[[1],[2],[3]]
print(np.vstack((a,b,c,d)))

输出:
[[1]
 [2]
 [3]
 [1]
 [2]
 [3]
 [1]
 [2]
 [3]
 [1]
 [2]
 [3]]

stack()

import numpy as np
a=[[1,2,3],
   [4,5,6]]
print("列表a如下:")
print(a)

print("增加一维,新维度的下标为0")
c=np.stack(a,axis=0)
print(c)

print("增加一维,新维度的下标为1")
c=np.stack(a,axis=1)
print(c)

输出:
列表a如下:
[[1, 2, 3], [4, 5, 6]]
增加一维,新维度下标为0
[[1 2 3]
 [4 5 6]]
增加一维,新维度下标为1
[[1 4]
 [2 5]
 [3 6]]

  上面的代码中a列表中的第一个元素为[1,2,3],那么当axis=0的时候,就是在它的中括号外面再加一个中括号,变成[ [1,2,3] ](其实1,2,3之间是没有逗号的,因为stack()函数会先把参数arrays中的每个元素变成numpy的数组,数组之间是没有逗号的,看看上面的代码输出就知道了,这里大家明白就行,我为了方便讲解,下面还会加上逗号),这样最外面那层中括号才代表维度下标为0的那维;当axis=1的时候,就是在里面加个中括号,变成了[ [1],[2],[3] ],这样里面加的那层中括号才代表维度下标为1的那维。同理当axis=0的时候[4,5,6]变成[ [ 4,5,6] ],当axis=1的时候,变成[ [4],[5],[6] ]。下面我们讲如何把增加一维度后的每个元素串起来。

posted @ 2020-10-10 11:42  齐天大圣打妖怪  阅读(144)  评论(0编辑  收藏  举报