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] ]。下面我们讲如何把增加一维度后的每个元素串起来。