增加维度
高纬度打印出来很不好观察,所以打印出来shape更加容易理解维度的增加,
此外一维向量a=np.array([1,2,3]), a[:,None],相当于变为二维并转置了shape=(3,1)
b
Out[16]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b.shape
Out[17]: (3, 3)
b[None,:,:].shape
Out[18]: (1, 3, 3)
b[:,None,:].shape
Out[19]: (3, 1, 3)
b[:,:,None].shape
Out[20]: (3, 3, 1)
维度叠加
##np.stack()中axis参数的理解
假设A,B,C的shape = (3,3)
axis = 0 将(3x3)的矩阵看为整体单位,从上往下堆
axis = 1 将A、B、C中的行作为整体单位,从上往下堆
axis = 2 将A、B、C中的单个数作为整体,从左往右堆
A = np. array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
B = np. array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
C = np. array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
np.stack([A,B,C], axis=0)
np.stack([A,B,C], axis=1)
np.stack([A,B,C], axis=2)
opencv的cv2.hconcat和 cv2.vconcat
import cv2
import numpy as np
data1 = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
hdata = cv2.hconcat([data1,data1,data1])#水平方向拼接,三维的很迷惑,改变的是二维度的信息,在第二个维度上进行纵向拼接。
vdata=cv2.vconcat([data1,data1,data1])#垂直方向拼接,同np.r_
print(hdata)
print("\n")
print(vdata)
Numpy中np.c_和np.r_
np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等。
np.c_是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等。
import numpy as np
data1 = np.array([ [[1, 2],
[3, 4]],
[[5, 6],
[7, 8]],
[[10,11],
[12,13]] ])
print(data1.shape) # (3三维, 2二维, 2一维)
data_c = np.c_[data1, data1, data1]
data_r = np.r_[data1, data1, data1]
print(data_c) # 主要是在第一个维度上横向拼接
print(data_c.shape) # (3, 2, 6)
print("\n"*3)
print(data_r) # 主要是在三维度上拼接,直接压落落,放在上面,这种是多种图片的集合拼接
print(data_r.shape) # (9, 2, 2)
data_c data_r