我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于numpy和torch.tensor的张量的操作

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于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 np
a=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 np
a = 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 torch
A=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]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> b = np.reshape(a, (2,3,1))
>>> b
array([[[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)
>>> a
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

(3) torch.view

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

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

例如:

import torch
tt1=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维的张量。

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

例:

import torch
tt2=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 torch
tt3=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 torch
inputs = 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 torch
inputs = torch.randn(1,3)
print(inputs.size())

结果:

torch.Size([1, 3])

4. 张量的扩展

(1) torch.tensor扩展方法

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

import torch

a = 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 torch

a = 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.shape
Out[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)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

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

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

关于numpy和torch.tensor的张量的操作

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

关于numpy和torch.tensor的张量的操作

这篇文章主要介绍了关于numpy和torch.tensor的张量的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-20

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

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

Python关于Numpy的操作基础

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。  NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协
2023-01-31

mySql关于统计数量的SQL查询操作

我就废话不多说了,大家还是直接看代码吧~select project_no, sum(case when device_state=0 then 1 else 0 end)as offTotal , sum(case when device
2022-05-26

怎么用PyTorch的einops张量操作神器

这篇文章主要介绍“怎么用PyTorch的einops张量操作神器”,在日常操作中,相信很多人在怎么用PyTorch的einops张量操作神器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用PyTorch的
2023-06-25

关于python简单的爬虫操作(requests和etree)

这篇文章主要介绍了关于python简单的爬虫操作(requests和etree),文中提供了实现代码,需要的朋友可以参考下
2023-05-16

python中关于文件的操作

今天让我们来一起学习一下python中关于文件的操作吧:先看看以下如果打开文件:#open()打开文件的方法:r参数只能以读的方式打开文件,不能写=(,,=)data=.read()(data)
2023-01-31

SymPy库关于矩阵的基本操作和运算

本文主要介绍了SymPy库关于矩阵的基本操作和运算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-10

关于java中的HashMap的实例操作

HashMap简介:1、以(键,值)对存储数据。2、不允许有重复的键,但允许有重复的值。3、不同步(多个线程可以同时访问)相关视频教程推荐:java在线学习实例演示如下:1、添加HashMap hash_map = new HashMap(); hash_m
关于java中的HashMap的实例操作
2015-07-15

关于Python的各种文件操作

这篇文章主要介绍了关于Python的各种文件操作,适合刚入门的小白或者对于文件操作基础不太牢固的同学,需要的朋友可以参考下
2023-05-15

关于Python操作Excel的基本方法

这篇文章主要介绍了关于Python操作Excel的基本方法,Python是一种功能强大的编程语言,可以用于许多任务,包括处理Excel文件,需要的朋友可以参考下
2023-05-18

python3中关于时间格式的操作

在写python时,很多时候需要用的时间函数,如:记录当前时间,以时间命名文件,或是比较时间的先后等,这里记录一下关于常用时间模块的方法。环境:ubuntu16.04python3.5.2用到两个模块:time 和 datetime时间戳
2023-01-31

nodejs中关于mysql数据库的操作

这篇文章主要介绍了nodejs中关于mysql数据库的操作方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录