一、张量

标量 可以看作是  零维张量

向量 可以看作是  一维张量

矩阵 可以看作是  二维张量

继续扩展数据的维度,可以得到更高维度的张量 ————>  张量又称 多维数组

给定一个张量数据,就可以确定 它的维度 + 大小 + 元素个数

# 对于一个 大小为 0个条目的元组() ,元素个数为1

只有 维度、大小、元素个数、各元素都相同的两个张量,才是两个相同的张量

举例:
对于某个张量,若其中有个条目是 ,那么这个1不可省略。也应该算进张量的维度中。
大小为(,) 的二维张量 和 大小为 (,)的张量虽然有着相同的元素个数,但是它们的维度不同,大小不同 ————> 不是相同的张量

# 一维张量的大小具有 (s[0],) 的形式,而不是 (s[0],1) 或 (1,s[0]) 的形式。一维张量和向量同构,但严格意义上斌不是向量,也就没有 “行(列)向量”的说法。

(1)Pytorch 中的张量

在Pytorch 中,张量是运算的基本数据类型,用类  torch.Tensor  实现。

import torch
t2 = torch.tensor([[0,1,2],[3,4,5]]) #将一个列表 转换成torch.Tensor 类 实例t2 【即张量t2】
print(t2)
print('数据 = {}'.format(t2))
print(t2.reshape(3,2)) #重新组织元素 【使其大小从(2,3)变为(3,2)】
print(t2 + 1) #逐 元素运算 【利用张量 进行数学计算,进行逐元素+1,得到新的张量】

在Pytorch 中,可以通过torch.Tensor类 实例的成员获得性质 ————  张量的大小、维度、元素个数

print('数据 = {}'.format(t2))
print('大小 = {}'.format(t2.size()))
print('维度 = {}'.format(t2.dim()))
print('元素个数 = {}'.format(t2.numel()))

另外,每个张量类实例还会有元素类型 (dtype):

可以通过张量类实例的成员 dtype 查看元素类型

print('元素类型 = {}'.format(t2.dtype))

结果:

元素类型 = torch.int64

上述代码在构造 torch.Tensor类实例是,使用了int 值列表————>  张量的数据类型默认是 torch.int64型

如果用 bool 值构造,则构造出来的张量元素类型默认是————>  torch.uint8型

如果用float值构造————>  torch.float32型

二、构造torch.Tensor类实例

使用以下函数来构造torch.Tensor类实例

(1)构造含有特定数据的张量

torch.tensor()

t0 = torch.tensor(0)
t1 = torch.tensor([0.,1.,2.])
t2 = torch.tensor([[[0.,1.,2.],[3.,4.,5.],[6.,7.,8.]],[[9.,10.,11.],[12.,13.,14.],[15.,16.,17.]],[[18.,19.,20.],[21.,22.,23.],[24.,25.,26.]]])

利用该函数构造了张量 t0,t1,t2 ,t3 ,在张量的构造语句中,使用了列表作为参数

由于参数列表中的数据都是浮点数,所以这些张量的元素类型都是 torch.float32

torch.tensor()的关键字参数 dtype ———— 用来指定张量的元素类型

# 如果没有这个关键字参数,张量的元素类型是从 列表元素 推到而来的【bool —— torch.uint8;   int —— torch.int64;   float —— torch.float32】

t_int8 = torch.tensor([1,2],dtype=torch.int8)

(2)构造特定大小的张量

torch.zeros()  torch.ones()   torch.empty 函数可以使用多个int 类型的参数来构造给定类型的变量

要想用这些函数构造n维张量,就要传入n个整数,这n个整数就是张量大小的n个条目,用此方法,可以不指定张量中元素的值,也可以指定张量中元素的值为相同值。

如果不指定张量中元素的值,可以用 torch.empty() 函数 ———— 构造出来的张量的元素值 是不确定的!

如果要指定张量中元素的值,可以用 torch.zeros() torch.ones() —— 指定代码中的元素均为 0/1

可以用 torch.full() 将元素初始化为0 1 以外的值 ———— 需要两个不同的参数 ———— 张量大小和 要填充的值

t1 = torch.empty(2)  #未初始化
print(t1)
t2 = torch.zeros(2,2) #各元素值为 0
print(t2)
t3 = torch.ones(2,2,2) #各元素值 为1
print(t3)
t4 = torch.full((2,2,2,2),3.) #各元素值为3
print(t4)
tensor([0., 0.])
tensor([[0., 0.],
[0., 0.]])
tensor([[[1., 1.],
[1., 1.]], [[1., 1.],
[1., 1.]]])
tensor([[[[3., 3.],
[3., 3.]], [[3., 3.],
[3., 3.]]], [[[3., 3.],
[3., 3.]], [[3., 3.],
[3., 3.]]]])

上述4个函数都有对应的 torch.*_like() 形式 ———— 构造一个和现有张量一样大小的张量

tt = torch.ones_like(t2)
print(tt)
tensor([[1., 1.],
[1., 1.]])

(3)构造等比 等差数列张量

等差数列:

 torch.arange()  构造等差 ———— 需要指定 数列的开始元素 start【含,默认0】,结束元素 end【不含】,和公差step

得到的数列包括start 但不包括end,数列的长度为 [ (end - start ) / step ]

torch.range() 函数 可以得到长度为 [ (end - start ) /  step  + 1 ] 的等差数列

以下代码可得到: 大小为(4,) ,元素都是 0,1,2,3这四个数的张量

a1 = torch.arange(0,4,step=1)
a2 = torch.range(0,3,step=1)
print(a1)
print(a2)
tensor([0, 1, 2, 3])
tensor([0., 1., 2., 3.])

构造等差数列 还可以使用 torch.linspace() 函数 ———— 前两个参数为数列 最开始的 和 最后的数 ,steps 指数列中一共有几个数

a3 = torch.linspace(0,3,steps=4)
print(a3)
tensor([0., 1., 2., 3.])

等比数列:

torch.logspace() ———— 前两个参数 经过 10^x 的运算后,才是数列最开始的数 和最后的数,steps 指数列一共有几个数

a4 = torch.logspace(0,3,steps=4)
print(a4)
tensor([   1.,   10.,  100., 1000.])

(4) 构造随机张量

概率分布 分为: 离散概率分布 + 连续概率分布

  1. 离散概率分布得到的样本一般是 0 1 这样的整数值
  2. 连续概率分布得到的样本一般是 浮点数

离散随机张量的构造:

连续随机张量:

【这块看的挺懵逼的.....所以就直接把书上的弄过来...后期直接查用。。。先学后面的,到后期再回顾这块】

Pytorch笔记 (3) 科学计算1的更多相关文章

  1. Pytorch笔记 (3) 科学计算2

    一.组织张量的元素 (1)重排张量元素 本节介绍在不改变 张量元素个数 和 各元素的值的情况下改变张量的大小 torch.Tensor类的成员方法 reshape() 参数是多个int类型的值. 如果 ...

  2. python学习笔记(2):科学计算及数据可视化入门

    一.NumPy 1.NumPy:Numberical Python 2.高性能科学计算和数据分析的基础包 3.ndarray,多维数组(矩阵),具有矢量运算的能力,快速.节省空间 (1)ndarray ...

  3. Python 科学计算-介绍

    Python 科学计算 作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/ 最新版本的 IPython notebook 课程文 ...

  4. Python科学计算(一)

    作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/ 最新版本的 IPython notebook 课程文件 http://git ...

  5. [Pytorch] pytorch笔记 <三>

    pytorch笔记 optimizer.zero_grad() 将梯度变为0,用于每个batch最开始,因为梯度在不同batch之间不是累加的,所以必须在每个batch开始的时候初始化累计梯度,重置为 ...

  6. Python科学计算三维可视化(整理完结)

    中国MOOC<Pyhton计算计算三维可视化>总结 课程url:here ,教师:黄天宇,嵩天 下文的图片和问题,答案都是从eclipse和上完课后总结的,转载请声明. Python数据三 ...

  7. Anaconda 用于科学计算的 Python 发行版

    用于科学计算的 Python 发行版: 1.Anaconda  https://www.continuum.io/    公司continuum.  有商业版本. Anaconda is the le ...

  8. 科学计算软件——Octave安装

    Octave是一个旨在提供与Matlab语法兼容的开放源代码科学计算及数值分析的工具,是Matlab商业软件的一个强有力的竞争产品. 参考:[ML:Octave Installation] Gener ...

  9. windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等

    安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...

随机推荐

  1. [uboot] (第四章)uboot流程——uboot编译流程 (转)

    以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为例 [uboot] uboot流程系列:[project X] tiny210(s5pv210)上电启动流程(B ...

  2. mysql 调优 来自5.6版本官方手册

    注意:下面示例中的key1和key2代表两个索引,key_part1和key_part2代表一个复合索引的第一列和第二列.non_key代表非索引列. 优化SQL语句 where语句优化: mysql ...

  3. MHA监控进程异常退出(MHA版本:0.56)

    最近遇到一个非常诡异的问题,mha后台进程自己中断退出了.以下是报错:Mon Dec 21 20:16:07 2015 - [info] OK.Mon Dec 21 20:16:07 2015 - [ ...

  4. requests结合xpath爬取豆瓣最新上映电影

    # -*- coding: utf-8 -*- """ 豆瓣最新上映电影爬取 # ul = etree.tostring(ul, encoding="utf-8 ...

  5. python基础语法-Ⅲ

    Python注释 python中单行注释采用 # 开头. 实例 输出结果: 注释可以在语句或表达式行末: python 中多行注释使用三个单引号(''')或三个双引号(""&quo ...

  6. linux系统装机分区

  7. BZOJ 1095: [ZJOI2007]Hide 捉迷藏 动态点分治+堆

    写了7k多,可以说是一己之力切掉了这道毒瘤题~ 开 $3$ 种堆,分别维护每个子树最大深度,以及每个节点在点分树中对父亲的贡献,和全局的最优解. 由于需要支持堆的删除,所以写起来特别恶心+麻烦. 细节 ...

  8. HGOI 20190711 题解

    Problem A 矩阵第K小数 给定一个$n \times m$的矩阵,位置$A_{i,j}  = i\times j$, 给出$Q$个询问,每一次查询矩阵中第$Q_i$小的数是多少. 对于100% ...

  9. 【BZOJ4456】 [Zjoi2016]旅行者 / 【UOJ #184】 【ZJOI2016】旅行者

    Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北 的道路,这些道路两两相交形成n×m个路口 (i,j)(1≤i≤n,1≤j ...

  10. vue路由 routers的写法:require用与不用

    vue路由的写法有很多种,这里我只说routers的写法,一种是compcomponent后面直接写路径,另一种是用require的方式,来看代码 import Vue from 'vue' impo ...