torch.reshape、np.reshape详解

超链接:深度学习工作常用方法汇总,矩阵维度变化、图片、视频等操作,包含(torch、numpy、opencv等)


1. torch.reshape、np.reshape

torch版

x.reshape()

作用:以相应的维度,改变tensor。

注:修改的shape必须满足原来的tensor和reshape的tensor元素个数相等,比如原来tensor的shape为(2,2,3),元素个数为12,那么要进行reshape必须满足元素个数为12,如(4,3,1),(3,2,2)等等。

rehsape函数有一个比较特殊的-1,-1的值为总元素个数除以(其他维度值相乘)
比如原始tensor维度为(2,2,3),reshape为(-1,3,4),-1的值就为12/(3×4)=1,即reshape后的tensor的shape为(1,3,4)

torch示例:

import torch

x = torch.tensor([[[1, 2, 3], [4, 5, 6]],
                  [[7, 8, 9], [10, 11, 12]]])

b = x.reshape((4, 3, 1))
c = x.reshape((1, 3, 4))
d = x.reshape((12, 1))
print('x_shape:', x.shape)  # torch.Size([2, 2, 3])
print('b_shape:', b.shape)  # b_shape: torch.Size([4, 3, 1])
print('c_shape:', c.shape)  # c_shape: torch.Size([1, 3, 4])
print('d_shape:', d.shape)  # d_shape: torch.Size([12, 1])
print('x:', x)
print('b:', b)
print('c:', c)
print('d:', d)

numpy版

x.reshape()

numpy的reshape有个order 参数, 默认order=‘C’。

order : 可选范围为{‘C’, ‘F’, ‘A’}
(1)“C”指的是用类C写的读/索引顺序的元素,最后一个维度变化最快,第一个维度变化最慢。以二维数组为例,简单来讲就是横着读,横着写,优先读/写一行。

(2)“F”是指用FORTRAN类索引顺序读/写元素,最后一个维度变化最慢,第一个维度变化最快。竖着读,竖着写,优先读/写一列。注意,“C”和“F”选项不考虑底层数组的内存布局,只引用索引的顺序。

3)“A”选项所生成的数组的效果与原数组a的数据存储方式有关,如果数据是按照FORTRAN存储的话,它的生成效果与”F“相同,否则与“C”相同。

注:FORTRAN和C是两个语言,他们存储数组的方式不同,FORTRSAN为列优先,而C为行优先。在python中默认数组生成的时候是按照C的方式进行存储。但,很多时候我们需要调用Fortran的一些库进行数学计算,所以需要让numpy生成的数组变成按照FORTRAN的方式存储,使用numpy.asfortranarray方法。

import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
x = x.reshape((1, 1, 1, 2, 5))
print('x_shape:', x.shape)  # (1, 1, 1, 2, 5)

猜你喜欢

转载自blog.csdn.net/qq_28949847/article/details/128568799
今日推荐