pytorch
的tensor
和numpy
和ndarray
可以说是每一个深度学习工程师必须熟悉的基础工具,而这两个用法相近,但又有部分差异的“轮子”,网上却没有一篇详细的博客进行总结和对比,因此在这里进行记录和整理,希望本文能够帮助各位同学和自己对pytorch
和numpy
的API加深的理解,并在运用时能做到信手拈来。
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
- Numpy Array API
- 所有可以使用
numpy.ndarray.xxx
的函数:官方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 可以同时在CPU 和GPU 上,而ndarray 只能在CPU 上;同时Tensor 具有梯度 |
该函数具有的额外参数以下函数均具有,下面不再赘述 |
1.2 常用构造变量(ones)
Tensor | (nd)Array | Similarities | differences | Function/Example |
---|---|---|---|---|
torch.ones(size) |
numpy.ones(shape) |
这里的size 和shape 都是指list /tuple 的sequence |
构建全 1 array/Tensor | |
torch.zeros(size) |
numpy.zeros(shape) |
全0Tensor | ||
torch.full(size, fill_value) |
numpy.full(shape, fill_value) |
都通过fill_value 来实现某个数值的填充 |
全fill_value array/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) |
input :Tensor 或者size |
prototype :array like ,即所有具有array形式的变量,例如ndarray 、list 、tuple |
- 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
快速实现额外参数(包括:dtype
、device
、requires_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 合并多个Tensor
或Ndarray
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.hstack
、numpy.vstack
、numpy.dstack
、
2.4 分离多个Tensor
或Ndarray
- 其他类似的更多函数:
numpy
:numpy.split
、numpy.hsplit
、numpy.vsplit
、numpy.dsplit
numpy.repeat
3. 基础运算API
待更…
转载:https://blog.csdn.net/qq_45779334/article/details/127698392
查看评论