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()函数