shape:返回 w h
data = np.array([[1, 2], [3, 4]]) shape = data.shape print(shape) # (2, 2)
size:返回 w x h
print(np.ones((3, 4)).size) # 12
resize and reshape
都有两种用法 np.resize x.resize np.reshape x.reshape
四种方法里 只有 x.resize 会改变原数据的形状
reshape 可自动计算形状,resize 不行
x = np.ones((2, 3)) x1 = np.resize(x, (1, 6)) print(x1) # [[1. 1. 1. 1. 1. 1.]] x2 = np.reshape(x, (-1, )) # reshape 可以自动计算形状 print(x2) # [1. 1. 1. 1. 1. 1.] x3 = x.reshape(-1, ) print(x3) # [1. 1. 1. 1. 1. 1.] print(x) # x shape 没变 # [[1. 1. 1.] # [1. 1. 1.]] x4 = x.resize(6, ) # x shape 变了 print(x4) # None print(x) # [1. 1. 1. 1. 1. 1.]
flatten and ravel
二者都是把数据 展开,拉成一维,区别在于 flatten 类似于 深拷贝,ravel 类似于 浅拷贝
data = np.array([[1, 2], [3, 4]]) ################# 展开 ################# ######### flatten ######### ### flatten 类似于深拷贝,改变 展开后的 值 不会影响 原值 data1 = data.flatten() print(data1) # [1 2 3 4] data2 = data.flatten('F') print(data2) # [1 3 2 4] data3 = data.flatten('C') ### 默认为 C print(data3) # [1 2 3 4] data4 = np.reshape(data, (4, )) ### 等价 print(data4) # [1 2 3 4] ### vs ravel data3[1] = 1000 print(data3) # [ 1 1000 3 4] print(data) # [[1 2] ### 原值没变 # [3 4]] ######### ravel ######### ### reval 类似于浅拷贝,改变 展开后 的值 会影响 原值 ### reval 也有 F C 参数 data_new = data.ravel() print('data_new is', data_new) # data_new is [1 2 3 4] ### vs flatten data_new[1] = 963 print(data_new) # [ 1 963 3 4] print(data) # [[ 1 963] ### 原值变了 # [ 3 4]]
transpose
将 多个维度进行 一次性重排,类似 tensor 的 permute
import numpy as np data = np.random.randn(3, 5, 6) print(data.shape) # (3, 5, 6) datan = data.transpose(2, 0, 1) print(datan.shape) # (6, 3, 5)
参考资料:
https://blog.csdn.net/liuweiyuxiang/article/details/78220080 numpy的ravel() 和 flatten()函数