numpy和torch数据操作对比
对numpy和torch数据操作进行对比,避免遗忘。
ndarray和tensor
import torch
import numpy as npnp_data = np.arange(6).reshape((2, 3))
torch_data = torch.arange(6) # 张量
tensor2array = torch_data.numpy()print('\nnumpy array:\n', np_data,'\ntorch tensor\n', torch_data,'\ntensor to array\n', tensor2array
)
"""
numpy array:[[0 1 2][3 4 5]]
torch tensortensor([0, 1, 2, 3, 4, 5])
tensor to array[0 1 2 3 4 5]
"""
numpy和tensor的维度
import torch
import numpy as npnp_data = np.array([[i for i in range(r * 4, (r + 1) * 4)] for r in range(5)], dtype=np.float32)
np_data = np_data.reshape((2, 5, 2)) # 5x4 reshape一下变 2x5x2
print('numpy shape', np_data.shape) # 数组的维度
print('numpy ndim', np_data.ndim) # 数组的轴,也就是rank,也就是shape的的大小
print('numpy size', np_data.size) # 数组元素的个数,也就是shape乘起来
print('numpy dtype', np_data.dtype) # 数组元素数据类型
print('numpy itemsize', np_data.itemsize) # 数组有元素数据类型的大小,float32, 32/8=4np_data = np_data[:, :, np.newaxis, :] # 增加维度
print('numpy add dim, np.newaxis', np_data.shape)np_data = np_data.transpose((2, 0, 1, 3)) # 转置 transpose
print('numpy transpose, np.newaxis', np_data.shape)np_data = np_data.squeeze(0) # 移除0维度,只能移除维数为1的维度
print('numpy remove dim, np.squeeze', np_data.shape)#######################
print()
#######################torch_data = torch.Tensor([[i for i in range(r * 4, (r + 1) * 4)] for r in range(5)]
)
torch_data = torch_data.view(2, 5, 2) # 方法变成view, 5x4 view一下变 2x5x2
print('torch shape', torch_data.shape)
print('torch ndim', torch_data.ndim)
print('torch size', torch_data.size()) # 要调用函数
print('torch dtype', torch_data.dtype) # 没有itemsizetorch_data = torch_data.unsqueeze(2) # 增加维度
print('torch add dim, torch.unsqueeze', torch_data.shape)torch_data = torch_data.permute((2, 0, 1, 3)) # 转置 permute
print('torch permute', torch_data.shape)torch_data = torch_data.squeeze(0) # 移除0维度,只能移除维数是1的维度
print('torch remove dim, torch.squeeze', torch_data.shape)"""
numpy shape (2, 5, 2)
numpy ndim 3
numpy size 20
numpy dtype float32
numpy itemsize 4
numpy add dim, np.newaxis (2, 5, 1, 2)
numpy transpose, np.newaxis (1, 2, 5, 2)
numpy remove dim, np.squeeze (2, 5, 2)torch shape torch.Size([2, 5, 2])
torch ndim 3
torch size torch.Size([2, 5, 2])
torch dtype torch.float32
torch add dim, torch.unsqueeze torch.Size([2, 5, 1, 2])
torch permute torch.Size([1, 2, 5, 2])
torch remove dim, torch.squeeze torch.Size([2, 5, 2])
"""
计算对比
import torch
import numpy as npnp_data = np.array([[1, 2], [1, 2]])
torch_data = torch.tensor(np_data)np_t = np.array([0, np.pi / 4., np.pi / 2.])
torch_t = torch.tensor(np_t)# 平均值
np_x = np.arange(5)
torch_x = torch.FloatTensor([i for i in range(5)])
# torch.mean 只能计算float的平均值,不能计算int的平均值,所有必须用FloatTensorprint('\nnumpy.abs:\n', np.abs(np_data),'\ntorch.abs:\n', torch.abs(torch_data),'\nnumpy.sin:\n', np.sin(np_t),'\ntorch.sin:\n', torch.sin(torch_t),'\nnumpy.mean\n', np.mean(np_x),'\ntorch.mean\n', torch.mean(torch_x)
)
"""
numpy.abs:[[1 2][1 2]]
torch.abs:tensor([[1, 2],[1, 2]])
numpy.sin:[0. 0.70710678 1. ]
torch.sin:tensor([0.0000, 0.7071, 1.0000], dtype=torch.float64)
numpy.mean2.0
torch.meantensor(2.)
"""
矩阵的乘法对比
import torch
import numpy as np# numpy矩阵相乘
na = np.array([[1, 2], [3, 4]])
nb = np.array([[1, 1], [0, 1]])
nc = np.matmul(na, nb)
nd = na * nb
print(nc, nd, sep='\n')# torch矩阵相乘
ta = torch.FloatTensor([[1, 2], [3, 4]])
tb = torch.FloatTensor([[1, 1], [0, 1]])
tc = torch.mm(ta, tb)
td = ta * tb
print(tc, td, sep='\n')"""
[[1 3][3 7]]
[[1 2][0 4]]
tensor([[1., 3.],[3., 7.]])
tensor([[1., 2.],[0., 4.]])
"""
tensor求导数
import torch
from torch.autograd import Variable# 变量
tensor = torch.FloatTensor([[1, 2], [3, 4]])
variable = Variable(tensor, requires_grad=True)
print(tensor)
print(variable)
t_mean = torch.mean(tensor * tensor)
v_mean = torch.mean(variable * variable)
print(t_mean)
print(v_mean)# 反向传播求导数
v_mean.backward()
print(variable.grad)print(variable) # Variable形式
print(variable.data) # tensor形式
print(variable.data.numpy()) # numpy形式,随后输出结果一般用numpy形式
tensor的池化操作
import torch
import torch.nn as nn
from torch.autograd import Variable# 最大池化与反池化
pool = nn.MaxPool2d(kernel_size=2,stride=2,return_indices=True,ceil_mode=True
)
unpool = nn.MaxUnpool2d(kernel_size=2, stride=2)
in_data = Variable(torch.Tensor([[[[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]]]])
)
print('\nin_data\n', in_data)
print(in_data.shape)out_data, indices = pool(in_data)
print('\nout_data\n', out_data)
print('\nindices\n', indices)un_data = unpool(out_data, indices)
print('\nun_data\n', un_data)"""
in_datatensor([[[[ 1., 2., 3., 4.],[ 5., 6., 7., 8.],[ 9., 10., 11., 12.],[13., 14., 15., 16.]]]])
torch.Size([1, 1, 4, 4])out_datatensor([[[[ 6., 8.],[14., 16.]]]])indicestensor([[[[ 5, 7],[13, 15]]]])un_datatensor([[[[ 0., 0., 0., 0.],[ 0., 6., 0., 8.],[ 0., 0., 0., 0.],[ 0., 14., 0., 16.]]]])
"""
相关文章:

ZooKeeper学习
一、ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示。 那么我们继续分析一下,ZooKeeper通过Master选举来帮助分布式系统解决单点故障, 保…

iOS SwiftUI篇-1 项目结构
iOS SwiftUI篇-1 项目结构 介绍Xcode新建的SwiftUI模版项目结构、跟普通Storyboard模版项目的差异、SwiftUI项目的app启动流程、UIScene概念介绍、AppDelegate.swift和Info.plist的差异 1.项目模版 Interface: SwiftUI Life Cycle: UIKit App Delegate Language: Swift Life…

js绑定事件和解绑事件
在js中绑定多个事件用到的是两个方法:attachEvent和addEventListener,但是这两个方法又存在差异性 attachEvent方法 只支持IE678,不兼容其他浏览器addEventListener方法 兼容火狐谷歌,不兼容IE8及以下 addEventListener方法 div.addEventListener(click,fn); div.addEventLi…

基于三维点云数据的主成分分析方法(PCA)的python实现
主成分分析(PCA)获取三维点云的坐标轴方向和点云法向量 # 实现PCA分析和法向量计算,并加载数据集中的文件进行验证import open3d as o3d # import os import numpy as np from scipy.spatial import KDTree# from pyntcloud import PyntClo…

CV02-FCN笔记
目录 一、Convolutionalization 卷积化 二、Upsample 上采样 2.1 Unpool反池化 2.2 Interpolation差值 2.3 Transposed Convolution转置卷积 三、Skip Architecture 3.1 特征融合 3.2 裁剪 FCN原理及实践,记录一些自己认为重要的要点,以免日后遗…

python基础之常用模块
6、TEXT PROCESSING SERVICES :文本处理服务 6.1、re 8、DATA TYPES : 数据类型 8.1、datetime 8.2、collections 8.3、copy 9、 NUMERIC AND MATHEMATICAL MODULES : 数字和数学模块 9.1、random 10、FUNCTIONAL PROGRAMMING MODULES : 函数式编程模块 10.1、iter…

笔记本电脑摄像头实现光流跟踪
看实验室里的师兄在写CSDN,自己也写一个,记录自己的学习进程吧。 研究生从机械转到了毫无基础的SLAM领域。研一半年上课加自学,对SLAM也有一丢丢的了解。最近看光流法时,想到用笔记本电脑的摄像头实现一下,就简单的…

JSON字符串 拼接与解析
常用方式: json字符串拼接(目前使用过两种方式): 1.运用StringBuilder拼接 StringBuilder json new StringBuilder(); json.append("{"); json.append(""uuid":" """ uuid "",&q…

iOS SwiftUI篇-3 排版布局layout
iOS SwiftUI篇-3 排版布局layout swiftUI提供的layout有: ZStack、GeometryReader、HStack、LazyVGrid、LazyHStack、LazyHGrid、LazyVStack、VStack、Spacer、ScrollViewReader等 HStack 水平横向布局容器,子view按顺序水平排列 HStack(alignment: .center, spacing: 10)…

CV04-UNet笔记
目录 一、UNet模型 二、Encoder & Decoder 2.1 Encoder 2.2 Decoder 2.3 classifier 学习U-Net: Convolutional Networks for Biomedical Image Segmentation,记录一些自己认为重要的要点,以免日后遗忘。 代码:https://github.com/…

Scrapy 学习笔记(-)
Scrapy Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 A…

Ubuntu18.04运行ORB_SLAM2
运行环境:Ubuntu18.04 预先安装的库 需要预先安装一些库,如Eign,Sophus,OpenCV等。笔者在阅读《SLAM十四讲》的时候已经安装,在此不再赘述。 ORB_SLAM2源码的下载与编译 git clone https://github.com/raulmur/ORB…

java中的各种流(老师的有道云笔记)
内存操作流-字节之前的文件操作流是以文件的输入输出为主的,当输出的位置变成了内存,那么就称为内存操作流。此时得使用内存流完成内存的输入和输出操作。如果程序运行过程中要产生一些临时文件,可采用虚拟文件方式实现;直接操作磁…

iOS SwiftUI篇-4 注解@State、@Binding、@ObservedObject、@EnvironmentObject、@Environment
iOS SwiftUI篇-4 注解@State、@Binding、@ObservedObject、@EnvironmentObject、@Environment @State 关联View的状态,当@State修饰的属性改变时,对应的View会跟着刷新,符合MVVM的设计理念 @State var count: Int = 0Section(header: Text("@States")) {Te
CV05-ResNet笔记
目录 一、为什么是ResNet 二、Residual Learning细节 2.1 shortcut计算 2.2 11卷积调整channel维度大小 2.3 ResNet层数 2.4 ResNet里的Basic Block 和 Bottleneck Block 2.5 Global Average Pooling 全局平均池化 2.6 Batch Normalization 学习ResNet,记录…

二叉树的前序,中序,后序的递归、迭代实现
二叉树的前序遍历 递归实现 递归实现没什么好说的。个人感觉将函数功能看成一个整体,不要去想栈中怎么实现的。毕竟自己的脑袋不是电脑,绕着绕着就蒙了。 void preordered_traversal_recursion(TreeNode* root) {if(root NULL) return;container.pus…

DataSet 动态添加列
public DataSet GetNewId(List<string> IdArr){DataSet ds new DataSet();DataTable newtb new DataTable();DataColumn column new DataColumn("cnt", typeof(string));//新增列newtb.Columns.Add(column);for (int i 0; i < IdArr.Count; i){StringBu…

iOS专题1-蓝牙扫描、连接、读写
iOS专题1-蓝牙扫描、连接、读写 概念 外围设备 可以被其他蓝牙设备连接的外部蓝牙设备,不断广播自身的蓝牙名及其数据,如小米手环、共享单车、蓝牙体重秤 中央设备 可以搜索并连接周边的外围设备,并与之进行数据读写通讯,如手机 日常生活中常见的场景是手机app通过蓝…

CV06-Xception笔记
目录 一、为啥是Xception 二、Xception结构 2.1 Xception结构基本描述 2.2 实现细节 2.3 DeepLabV3改进 三、记录pytorch采坑relu激活函数inplaceTrue Xception笔记,记录一些自己认为重要的要点,以免日后遗忘。 复现Xception论文、DeepLabV改进的…

C++排序算法实现(更新中)
比较排序法:如冒泡排序、简单选择排序、合并排序、快速排序。其最优的时间复杂度为O(nlogn)。 其他排序法:如桶排序、基数排序等。时间复杂度可以达到O(n)。但试用范围有要求。 桶排序:排序的数组元素跨距不能很大。因为跨距很大的话…

iOS SwiftUI篇-5 专题NavigationView、NavigationLink
iOS SwiftUI篇-5 专题NavigationView、NavigationLink NavigationView:标题、展示模式、隐藏导航栏、隐藏返回按钮、添加导航栏按钮 NavigationLink:Text文本跳转、Image图片跳转、Button按钮跳转、点击按钮根据业务跳转到不同页面 NavigationView 标题、展示模式 import S…

PHP artisan
Artisan 是 Laravel 提供的 CLI(命令行接口),它提供了非常多实用的命令来帮助我们开发 Laravel 应用。前面我们已使用过 Artisan 命令来生成应用的 App Key 和控制器。在本教程中,我们会用到以下 Artisan 命令,你也可以…

【转载】Pytorch在加载模型参数时指定设备
转载 https://sparkydogx.github.io/2018/09/26/pytorch-state-dict-gpu-to-cpu/ >>> torch.load(tensors.pt) # Load all tensors onto the CPU >>> torch.load(tensors.pt, map_locationtorch.device(cpu)) # Load all tensors onto the CPU, using a fun…

目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)
首先贴上代码原作者的github:https://github.com/chenyuntc/simple-faster-rcnn-pytorch(非代码作者,博文只解释代码) 今天看完了simple-faster-rcnn-pytorch-master代码的最后一个train.py文件,是时候认真的总结一下了࿰…

hp-ux 集群,内存 小记
hp-ux 集群,内存 小记 -----查看hp 集群状态信息 # cmviewcl -v CLUSTER STATUS dbsvr up NODE STATUS STATE db01 up running Cluster_Lock_LVM: VOLUM…

iOS SwiftUI篇-6 专题TabView
iOS SwiftUI篇-6 专题TabView TabView: 图片+文字组成tabItem,选中时改变图片和文字颜色 跳转到二级页面时隐藏tabbar,返回到首页时显示tabbar 首页、我的两个tab,效果图: 图片文字组成tabItem,选中时改变图片和文字颜色 代码: struct MainContentView: View {@State…

三维刚体变化中Rcw,tcw的含义
高翔博士的《视觉SLAM十四讲》中,介绍Tcw指从世界坐标w到c的变换矩阵。但研一学机器人学的时候,讲T12的含义是,坐标系2相对于坐标系1的变换。于是一脸懵逼。昨天想了一晚上,有了一点自己的想法,在这记录一下࿰…

CV07-DeepLab v3+笔记
目录 一、Dilated Convolution 膨胀卷积 二、ASPP与Encoder & Decoder 三、深度可分离卷积 3.1 深度可分离卷积原理 3.2 深度可分离卷积减小参数量和计算量 3.3 深度可分离卷积实现细节 四、Xception作为Backbone DeepLab v3笔记,记录一些自己认为重要的…

1116.加减乘除
题目描述:根据输入的运算符对输入的整数进行简单的整数运算。 运算符只会是加、减-、乘*、除/、求余%、阶乘!六个运算符之一。 输出运算的结果,如果出现除数为零,则输出“error”,如果求余运算的第二个运算数为0,也输出…

Flutter专题1-环境搭建
Flutter专题1-环境搭建和创建项目 这里以MaciOS为例,其他平台参考官网https://flutter.dev/docs/get-started/install 1. 系统要求 系统:macOS (64-bit) 硬盘空间:2.8G 工具:Git 2.获取Flutter SDK 2.1下载SDK,从https://flutter.dev/docs/development/tools/s…