文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

numpy和torch.tensor的张量操作方法是什么

2023-07-05 04:09

关注

今天小编给大家分享一下numpy和torch.tensor的张量操作方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. 张量的拼接

(1) numpy.concatenate

np.concatenate((a1,a2,a3,…), axis=0)

张量的拼接要用np.concatenate这个方法的,其中 a1,a2,a3,…是拼接的子张量,axis是维数,axis=0表示按照第一维进行拼接。

例如将两个二维的张量按照第一维拼接成一个二维的张量:

import numpy as npa=np.array([[1,2,3]])b=np.array([[4,5,6]])c=np.concatenate((a,b),axis=0)print(c)d=np.concatenate((c,a),axis=0)print(d)e=np.concatenate((c,c),axis=1)print(e)

结果

array([[1, 2, 3],
       [4, 5, 6]])
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3]])
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 6, 4, 5, 6]])

对于axis选择的更简单直接的理解是我们可以从将被拼接的两个矩阵的形状上来看,比如

a.shape=(3,1,2), b.shape=(6,1,2),则我们对其进行拼接的话目的是让拼接之后的shape=(9,1,2),那么我们就选择axis=0,即代表对第0维的进行相加。

代码如下:

import numpy as npa = np.zeros((3, 1, 2))b = np.zeros((6, 1, 2))c = np.concatenate((a, b), axis=0)print(c.shape)

结果为:

(9, 1, 2)

(2) torch.cat

这里的拼接和上面介绍的numpy的拼接功能是一样的

C = torch.cat( (A,B),0 )  #按维数0拼接(竖着拼)C = torch.cat( (A,B),1 )  #按维数1拼接(横着拼)

例:

import torchA=torch.ones(2,3)  #2x3的张量(矩阵)   B=2*torch.ones(4,3)  #4x3的张量(矩阵)    C=torch.cat((A,B),0)  #按维数0(行)拼接print(C)

结果:

tensor([[ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.],
        [ 2.,  2.,  2.]])

接着上面

D=2*torch.ones(2,4) #2x4的张量(矩阵)C=torch.cat((A,D),1)#按维数1(列)拼接print(C)

结果:

tensor([[ 1.,  1.,  1.,  2.,  2.,  2.,  2.],
        [ 1.,  1.,  1.,  2.,  2.,  2.,  2.]])

2. 张量的重构

(1) np.reshape

>>> import numpy as np>>> a = np.array([[1,2,3],[4,5,6]])>>> aarray([[1, 2, 3],       [4, 5, 6]])>>> b = np.reshape(a, (2,3,1))>>> barray([[[1],        [2],        [3]],       [[4],        [5],        [6]]])>>> b.shape(2, 3, 1)

(2) array.shape

>>> import numpy as np>>> a = np.array([1,2,3,4,5,6,7,8])>>> a.shape = (2, 4)>>> aarray([[1, 2, 3, 4],       [5, 6, 7, 8]])

(3) torch.view

在pytorch中view函数的作用为重构张量的维度,相当于numpy中resize()的功能,但是用法可能不太一样。

torch.view(参数a,参数b,…)

例如:

import torchtt1=torch.tensor([-0.3623, -0.6115,  0.7283,  0.4699,  2.3261,  0.1599])result=tt1.view(3,2)print(result)

结果

tensor([[-0.3623, -0.6115],
        [ 0.7283,  0.4699],
        [ 2.3261,  0.1599]])

在上面例子中参数a=3和参数b=2决定了将一维的tt1重构成3x2维的张量。

有的时候会出现torch.view(-1)或者torch.view(参数a,-1)这种情况。

例:

import torchtt2=torch.tensor([[-0.3623, -0.6115],         [ 0.7283,  0.4699],         [ 2.3261,  0.1599]])result=tt2.view(-1)print(result)

结果:

tensor([-0.3623, -0.6115,  0.7283,  0.4699,  2.3261,  0.1599])

由上面的案例可以看到,如果是torch.view(-1),则原张量会变成一维的结构。

例:

import torchtt3=torch.tensor([[-0.3623, -0.6115],         [ 0.7283,  0.4699],         [ 2.3261,  0.1599]])>>> result=tt3.view(2,-1)

结果:

tensor([[-0.3623, -0.6115,  0.7283],
        [ 0.4699,  2.3261,  0.1599]])

由上面的案例可以看到,如果是torch.view(参数a,-1),则表示在参数b未知,参数a已知的情况下自动补齐列向量长度,在这个例子中a=2,tt3总共由6个元素,则b=6/2=3。

例:

import torchinputs = torch.randn(1,3)print(inputs)print(inputs.view(1, 1, -1))

结果:

tensor([[-0.5525,  0.6355, -0.3968]])
tensor([[[-0.5525,  0.6355, -0.3968]]])

将二维变为三维,a=1,b=1,c=3/(1*1)

3. 张量的形状

(1) torch.size

import torchinputs = torch.randn(1,3)print(inputs.size())

结果:

torch.Size([1, 3])

4. 张量的扩展

(1) torch.tensor扩展方法

用unsqueeze方法将原张量进行维度扩张,unsqueeze后面括号里的数字代表在哪个维度扩张

import torcha = torch.tensor([[1, 2, 3], [4, 5, 6]])b = torch.tensor([[7, 8, 9], [4, 5, 6]])print(a)print(b)a = a.unsqueeze(0)b = b.unsqueeze(0)print(a)print(b)c = torch.cat((a, b), 0)print(c)print(c.shape)

结果为

tensor([[1, 2, 3],
        [4, 5, 6]])
tensor([[7, 8, 9],
        [4, 5, 6]])
tensor([[[1, 2, 3],
         [4, 5, 6]]])
tensor([[[7, 8, 9],
         [4, 5, 6]]])
tensor([[[1, 2, 3],
         [4, 5, 6]],

        [[7, 8, 9],
         [4, 5, 6]]])
torch.Size([2, 2, 3])

用squeeze方法将原张量进行维度缩减,squeeze后面括号里的数字代表在哪个维度缩减

import torcha = torch.tensor([[1, 2, 3], [4, 5, 6]])b = torch.tensor([[7, 8, 9], [4, 5, 6]])print(a)print(b)a = a.unsqueeze(0)b = b.unsqueeze(0)print(a)print(b)a = a.squeeze(0)b = b.squeeze(0)print(a)print(b)

结果为

tensor([[1, 2, 3],
        [4, 5, 6]])
tensor([[7, 8, 9],
        [4, 5, 6]])
tensor([[[1, 2, 3],
         [4, 5, 6]]])
tensor([[[7, 8, 9],
         [4, 5, 6]]])
tensor([[1, 2, 3],
        [4, 5, 6]])
tensor([[7, 8, 9],
        [4, 5, 6]])

(2) np.array扩展方法

np.expand_dims:用于扩展数组的形状

原始数组:

import numpy as np In [12]:a = np.array([[[1,2,3],[4,5,6]]])a.shapeOut[12]:(1, 2, 3)

np.expand_dims(a, axis=0)表示在0位置添加数据,转换结果如下:

In [13]:
b = np.expand_dims(a, axis=0)
b
Out[13]:
array([[[[1, 2, 3],
         [4, 5, 6]]]])
 
In [14]:
b.shape
Out[14]:
(1, 1, 2, 3)

以上就是“numpy和torch.tensor的张量操作方法是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯