numpy与torch中关于矩阵变换函数的一些比较

numpy中的reshape,resize,transpose,swapaxes,flatten

torch中的view,transpose,reshape,permute,flatten

在NumPy和PyTorch中,许多张量操作方法功能相似但存在细节差异。以下是它们的对比分析:

一、Reshape 操作

1 NumPy: reshape

返回视图(如果内存连续),否则返回副本,不修改原数组。

a = np.arange(6).reshape(2, 3)

2 PyTorch: view

类似reshape,但要求张量内存连续(否则报错),不复制数据,返回视图。

b = torch.arange(6).view(2, 3)
x = x.contiguous().view(3, 4)  # 强制连续后使用view()

3 PyTorch: reshape

兼容view,但自动处理非连续张量(可能触发复制)。reshape操作相当于先把向量展平成一位向量,再重新规划矩阵形状。

c = torch.arange(6).reshape(2, 3)
特性 reshapeview
内存连续性要求无(自动处理)必须连续
返回类型视图(连续时)或副本(非连续时)视图(必须连续)
适用场景通用形状调整已知连续的快速形状调整

二、调整大小

NumPy: resize

直接修改原数组形状,可扩展或截断数据

a = np.array([1,2,3])
a.resize(5)  # 结果:[1,2,3,0,0]

三、转置操作

NumPy: transpose

反转轴顺序或指定轴交换,相当于torch中的transpose+permute。

a = np.arange(6).reshape(2,3)
a.transpose()  # 等价于 a.T

NumPy: swapaxes

交换两个指定轴。

a = np.ones((2,3,4))
a.swapaxes(0, 2)  # 形状变为 (4,3,2)

PyTorch: transpose

交换两个指定维度。

b = torch.arange(6).view(2,3)
b.transpose(0, 1)  # 形状变为 (3,2)

PyTorch: permute

更灵活的维度重排,可指定所有维度的顺序。

c = torch.rand(2,3,4)
c.permute(2,0,1)  # 形状变为 (4,2,3)

四、展平操作

NumPy: flatten

返回一维副本(无论内存是否连续)。

a = np.array([[1,2], [3,4]])
a.flatten()  # [1,2,3,4]

PyTorch: view(-1)

返回一维视图(要求内存连续)。

b = torch.tensor([[1,2], [3,4]]).view(-1)

PyTorch: torch.flatten()

类似NumPy的flatten,但支持指定起始维度。

c = torch.rand(2,3,4)
torch.flatten(c, start_dim=1)  # 形状变为 (2, 12)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值