首页 > 编程语言 >Python_numpy-增加以及修改维度

Python_numpy-增加以及修改维度

时间:2024-01-26 17:11:55浏览次数:21  
标签:box None Python torch np 维度 numpy

gradio组件

    输入组件-输出组件
    输入输出组件	
    多输入和多输出组件
     gr.State是一个不可见的组件,目的是在后台存储一些变量方便访问和交互
    Block components
           Textbox : interactive interactive=True
    Event listener
               change() event listener   play() event listener
           method  input  output 
    	        multiple input components pass data to the function       	    
        Function-method
    	    single data flow
    	      many data flows  multi-step  ( pipeline    
    	 .select() can be type hinted by a gradio.SelectData argument.			 	 

函数:

生成器函数,常规函数
   全局变量
   Gradio支持的另一种数据持久性是会话状态,数据在一个页面会话中的多次提交中持久存在
       在添加输入和输出时添加state组件
	      gr.update(visible = state), state

网络设置

 通过设置server_name=‘0.0.0.0’(表示使用本机ip),server_port(可不改,默认值是7860)。那么可以通过本机ip:端口号在局域网内分享应用。
  # show_error为True表示在控制台显示错误信息。
  demo.launch(server_name='0.0.0.0', server_port=8080, show_error=True)

算法

    box = box * torch.Tensor([W, H, W, H])
	### 中心宽高(xywh)格式的坐标数据,所以把它转换成xyxy格式(左上角点和右下角点)的坐标数据
    # from xywh to xyxy
    box[:2] -= box[2:] / 2
    box[2:] += box[:2]	
	
    (0,0)
    |------ x->
    |  
    |
    |	
    y	
 cv2.rectangle() 函数来给图像进行框选 这个函数中的pt1和pt2参数指的就是要框选的图像的左上角点和右下角点
 
 
 def xywh2xyxy(x):
    # Convert nx4 boxes from [x, y, w, h] to [x1, y1, x2, y2] where xy1=top-left, xy2=bottom-right
    y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x)
    y[:, 0] = x[:, 0] - x[:, 2] / 2  # top left x
    y[:, 1] = x[:, 1] - x[:, 3] / 2  # top left y
    y[:, 2] = x[:, 0] + x[:, 2] / 2  # bottom right x
    y[:, 3] = x[:, 1] + x[:, 3] / 2  # bottom right y
    return y

  # from xywh to xyxy
    box[:2] -= box[2:] / 2
    box[2:] += box[:2]	
 Intersection over Minimum (IoM ) is better suited than Intersection over Union (IoU ) 		
 IoU(Intersection over Union,交并比)和
 IoM(Intersection over Minimum,交最小比)
    IoM是交集面积除以目标边界框和真实边界框中面积较小的那个	 

命令功能

np.multiply(a,b)  
      维度一致 :a和b矩阵或数组对应位置相乘	
	   实现对应元素相乘,有2种方式,一个是np.multiply(),另外一个是*
	   
 向量元素对应位置相乘:np.multiply(a,b)等价于a*b
 向量的内积,即点乘:np.dot(a,b)等价于a@b
 向量的外积,即叉乘:np.cross(a,b)
 
 矩阵点乘,即对应元素相乘:np.multiply(a,b)等价于a*b   矩阵点乘要求两矩阵为同型矩阵,即两个矩阵的行数与列数都相同
 矩阵叉乘,即矩阵乘法规则运算:np.dot(a,b)等价于a@b    矩阵叉乘中, 前者的列数必须和后者的行数相等
 
 einsum 专门用于张量的计算,比如对数组进行乘法、取和、矩阵乘法、计算内积和外积等。 
  和其他张量工具相比,einsum的优势在于支持对不同字母进行灵活的指定和重组,同时还可以在计算之前对数组进行各种操作,以适应各种计算需求。
 
import numpy as np
out = np.clip(a, a_min, a_max, out=None) 
inter = np.clip(xy_max-xy_min, a_min=0, a_max=np.inf)

Numpy 的 prod(~) 计算输入数组中值的乘积
numpy是没有属性clamp的。能替代pytorch的clamp的 == numpy的clip
   torch.clamp()

   这个函数其实就是对张量进行上下限的限制,超过了指定的上限或是下限之后,该值赋值为确定的界限的值
torch.prod()函数对这个张量进行操作,计算所有元素的乘积

dot可以用于numpy中的多维矩阵间的矩阵相乘,torch中的多维使用mm

维度修改函数

numpy
    中增加维度用np.expand_dims(x, axis)函数
    numpy中的squeeze 函数 从数组的形状中删除单维度条目,即把shape中为1的维度去掉,相当于减少维度
     arr_1 = numpy.squeeze(arr, axis = None)
      arr表示输入的数组;
      axis的取值可为None或0,默认为None,表示删除所有shape为1的维度。axis为0表示删除 一层 shape为1的维度	
     unsqueeze或view:为数据某一维的形状补1
     expand或expand_as:重复数组,实现当输入的数组的某个维度的长度为1时,计算时沿此维度复制扩充成一样的形状
     注:repeat与expand功能相似,
	    但是repeat会把相同数据复制多份,而expand不会占用额外空间,只会在需要的时候才扩充,可以极大地节省内存 
     np.broadcast_to函数将数组广播到新形状。
	 numpy.broadcast_to(array, shape, subok=False)[source]

torch:
  开辟或删除维度
        tensor.unsqueeze(dim=)从第dim维上开拓一个新的维度
        tensor.squeeze()将所有长度为1的维度删除
   torch.prod(input, dim, keepdim=False, *, dtype=None) → Tensor	
      将 dim 压缩(请参见 torch.squeeze() ),从而使输出张量减少1个维度。
    input(Tensor)–输入张量。
    dim(int)–缩小的尺寸。
    keepdim(bool)–输出张量是否保持 dim 
	
	将两个不同形状的tensor广播成相同形状 torch.broadcast_tensor(a,b)
	
	
# [N,2] -> [N,1,2] -> [N,M,2] # [M,2] -> [1,M,2] -> [N,M,2]
    A = boxes0.shape[0]
    B = boxes1.shape[0]
    xy_max = np.minimum(boxes0[:, np.newaxis, 2:].repeat(B, axis=1), np.broadcast_to(boxes1[:, 2:], (A, B, 2)))	
	
	numpy.repeat(a, repeats, axis=None);
	
np.newaxis的作用是:在当前位置,插入一个新维度。np.newaxis 在使用和功能上等价于 None,其实就是 None 的一个别名

Pillow库

Pillow库最常用的两个模块是Image和ImageDraw
 PIL.ImageDraw.Draw.rectangle(xy, fill=None, outline=None)	
 plt.scatter(x, y, s=area, c=colors, alpha=0.5, marker=",")
      alpha=0.5 表示不透明度为 0.5
      s=size :设置气泡的大小,也就是将"sepal length (cm)"列的数值大小,当作气泡的面积大小,或者说半径大小

    其中:x,y,s,c维度一样就能成

参考

 numpy和torch函数使用 https://blog.csdn.net/yangjinyi1314/article/details/127119717	 
 https://github.com/pytorch/vision/blob/main/torchvision/ops/boxes.py

标签:box,None,Python,torch,np,维度,numpy
From: https://www.cnblogs.com/ytwang/p/17989802

相关文章

  • python之常用标准库-random
    1.randomdefrandom(self):"""Getthenextrandomnumberintherange[0.0,1.0)."""return(int.from_bytes(_urandom(7),'big')>>3)*RECIP_BPF翻译:获取0,1之间的随机浮点数1#!/usr/bin/python2importrandom3p......
  • Python中为何使用新语法而不是装饰器来实现async/await异步功能
    Python是一种多范式编程语言,通过引入新的语法和特性,不断提升其功能和灵活性。在异步编程领域,Python引入了async/await关键字来实现协程和异步操作,而不是使用已有的装饰器语法。本文将探讨为何Python选择引入新语法来实现async/await异步功能,以及与装饰器的区别和优势。一、理解异步......
  • 在 Python 中如何实现列表元素去重
    在日常的Python编程中,我们经常需要对列表进行去重操作,以便保证程序的正确性和效率。Python提供了多种方法来实现列表元素去重,本文将介绍其中的四种方法。一、使用set()函数set()函数是Python内置的去重函数,它可以使列表中的元素不重复,并将其转换为集合类型,最后再转换回列表类型。具......
  • 使用 Python 的 Paramiko 库实现远程文件复制
    本文将介绍如何使用Paramiko库在Python中实现远程访问并复制文件到本地。Paramiko是一个用于SSHv2协议的Python实现,它提供了简单而强大的功能来进行远程操作。我们将学习如何建立SSH连接、执行远程命令以及复制文件到本地。一、安装Paramiko首先,我们需要安装Paramiko库。可以使用pi......
  • Python 多线程的局限性及适用场景解析
     Python是一门功能强大且广泛应用的编程语言,然而在使用多线程方面,它存在一些局限性。本文将探讨Python多线程的局限性,并分析其适用场景,帮助读者更好地理解Python多线程的实际运用。 正文: 一、Python的全局解释器锁(GIL) Python的全局解释器锁(GlobalInterpreterLock,简称GIL)是P......
  • itop-RK3588开发板机器视觉开发OpenCV-Python的安装
    由于 iTOP-RK3588 编译安卓和 Linux 源码使用的 ubuntu 版本为 ubuntu20.04,为了方便和统一,本手册的实验环境也为 Ubuntu20.04,如果使用的是其他版本的 ubuntu。可能会存在一些细微的区别,建议大家所使用的 ubuntu 版本和我们保持一致。使用以下命令安装 OpenCV-Python,安......
  • itop-RK3588开发板机器视觉开发OpenCV-Python的安装
    由于 iTOP-RK3588 编译安卓和 Linux 源码使用的 ubuntu 版本为 ubuntu20.04,为了方便和统一,本手册的实验环境也为 Ubuntu20.04,如果使用的是其他版本的 ubuntu。可能会存在一些细微的区别,建议大家所使用的 ubuntu 版本和我们保持一致。使用以下命令安装 OpenC......
  • Python3 md5
    Python3md5MD5信息摘要算法(英语:MD5Message-DigestAlgorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。在python3的标准库中,已经移除了md5模块,而关于hash加密算法都放在hashlib这个标准库中,hashlib提供了常见的摘要......
  • python之常用标准库-时间
    1.time时间戳:它代表了从格林尼治时间1970年01月01日00时00分00秒(即北京时间的1970年01月01日08时00分00秒)开始到现在经过的总秒数。struct_time:用一个包含9个序列的元组组成(tm_year=2024,tm_mon=1,tm_mday=26,tm_hour=2,tm_min=49,tm_sec=56,tm_wday=4,tm_yday=26,......
  • python 1
    importmathdeflcm(a,b):print('最大公约数math.gcd({},{})'.format(a,b),math.gcd(a,b))returna*b//math.gcd(a,b)deflcm_range(n):lcm_value=1foriinrange(2,n+1):lcm_value=lcm(lcm_value,i)returnl......