小言_互联网的博客

Pytorch(Tensor)-Numpy(ndarrays) API对照表

346人阅读  评论(0)

pytorchtensornumpyndarray可以说是每一个深度学习工程师必须熟悉的基础工具,而这两个用法相近,但又有部分差异的“轮子”,网上却没有一篇详细的博客进行总结和对比,因此在这里进行记录和整理,希望本文能够帮助各位同学和自己对pytorchnumpyAPI加深的理解,并在运用时能做到信手拈来。

Pytorch API Document:https://pytorch.org/docs/stable/index.html
Numpy API Document:https://numpy.org/doc/stable/reference/index.html

0. Tensor和Ndarray有什么区别?

此处借鉴几位优秀博主的回答:


接下来进入正式的总结阶段:

1. 变量基础定义API

1.1 基础变量

Tensor (nd)Array Similarities differences Function/Example
torch.tenosr(data, dtype=None, device=None, requires_grad=False) numpy.array(data, dtype=None) 都可以对dtype进行定义 Tensor可以同时在CPUGPU上,而ndarray只能在CPU上;同时Tensor具有梯度 该函数具有的额外参数以下函数均具有,下面不再赘述

1.2 常用构造变量(ones)

Tensor (nd)Array Similarities differences Function/Example
torch.ones(size) numpy.ones(shape) 这里的sizeshape都是指list/tuplesequence 构建全 1 array/Tensor
torch.zeros(size) numpy.zeros(shape) 全0Tensor
torch.full(size, fill_value) numpy.full(shape, fill_value) 都通过fill_value来实现某个数值的填充 fill_valuearray/Tensor
torch.eye(n, m=None) numpy.eye(N, M=None) n都代表默认列数,如果没有m,则行也为m 对角线为1,其他为0的单位2D array/Tensor
X numpy.identity(n) 对角线为1,行列相等的单位阵
torch.empty(size) numpy.empty(shape) 全为uninitialized data的array/Tensor(即0或者接近0的数)

1.3 常用构造变量(ones_like)

Tensor (nd)Array Tensor Params Ndarray Params Function/Example
torch.empty_like(input) numpy.empty_like(prototype) inputTensor或者size prototypearray like,即所有具有array形式的变量,例如ndarraylisttuple - numpy: a = ([1,2], [4,5]); a = np.array([[1., 2.],[4.,5.]]); np.empty_like(a); - torch: a=torch.empty((2,3)); torch.empty_like(a)
torch.ones_like(size) numpy.ones_like(shape)
torch.zeros_like(size) numpy.zeros_like(shape)
torch.full_like(size, fill_value) numpy.full_like(shape, fill_value)
  • 额外提示:Tensor可以使用Tensor.new_xxxx快速实现额外参数(包括:dtypedevicerequires_grad)全部相同的新变量,例如:
>>> tensor = torch.tensor((), dtype=torch.int32, device="cuda")
>>> tensor.new_ones((2, 3))
tensor([[ 1,  1,  1],
        [ 1,  1,  1]], dtype=torch.int32, device="cuda")

2. 基础维度操作API


2.1 更换维度或者变换shape

Tensor (nd)Array Tensor Params Ndarray Params Function/Example
torch.reshape(input, shape) \ Tensor.reshape(shape) numpy.reshape(a, newshape) \ ndarray.reshape(new_shape) 按照给定的新维度变换维度
torch.resize(input, shape) \ Tensor.resize(shape) numpy.resize(a, newshape) \ ndarray.resize(new_shape) 输入参数可以是tuple,也可以是n个int,参考Numpy Example 按照给定的新维度变换维度
torch.transpose(input, dim0, dim1) \ Tensor.transpose(dim0, dim1) numpy.swapaxes(a, axis1, axis2) \ ndarray.swapaxes(axis1, axis2) 输入为需要交换的两个维度,参考Torch Example 输入为需要交换的两个维度,参考Numpy Example 交换某两个维度
torch.permute(input, dims) \ Tensor.permute(*dims) numpy.transpose(a, axes=None) \ ndarray.transpose(*axes) dims:最终tensor的shape,可以是tuple,也可以是n个int,参考Torch Example axes:可以是tuple,也可以是n个int,若未指定,则反向交换维度;参考Numpy Example 交换某两个维度

2.2 增加或减少某一维

Tensor (nd)Array Tensor Params Ndarray Params Function/Example
torch.squeeze(input, dim=None) \ tensor.squeeze(dim=None) numpy.squeeze(a, axis=None) \ ndarray.squeeze(axis=None) 去除某一为1的维度
torch.unsqueeze(input, dim=None) \ tensor.unsqueeze(dim=None) numpy.unsqueeze(a, axis=None) \ ndarray.unsqueeze(axis=None) 指定增加某一维度
X numpy.expand_dims(a, axis) 指定增加某一维度

2.3 合并多个TensorNdarray

Tensor (nd)Array Tensor Params Ndarray Params Function/Example
tensor.stack(tensors, dim=0) numpy.stack(arrays, axis=0) tensors:用list装起来的tensor arrays :用list装起来的array_like(array, list)的变量 在指定维度新建一维,合并tensor/ array
torch.cat(tensors, dim=0) \ torch.concatenate(tensors, dim=None) numpy.concatenate((a1, a2, ...), axis=0 在指定维度直接合并tensor/ array
  • 其他类似的更多函数:
    • numpy.hstacknumpy.vstacknumpy.dstack

2.4 分离多个TensorNdarray

  • 其他类似的更多函数:
    • numpynumpy.splitnumpy.hsplitnumpy.vsplitnumpy.dsplit

numpy.repeat

3. 基础运算API

待更…


转载:https://blog.csdn.net/qq_45779334/article/details/127698392
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场