python 近期用到的基础知识汇总(主要是numpy和pytorch的相关矩阵变化函数)(一)

ps两个库好多类似的函数傻傻分不清,总结下。

1.np.where

where()的用法

首先强调一下,where()函数对于不同的输入,返回的只是不同的。

1当数组是一维数组时,返回的值是一维的索引,所以只有一组索引数组

2当数组是二维数组时,满足条件的数组值返回的是值的位置索引,因此会有两组索引数组来表示值的位置

xx,yy,zz= np.where(Mask)

这是3维数组的x,y,z值。

2.比较重要的img是一张图片那么img2=cv2.imread(path)[::-1, ::-1, ::-1]中::-1 实现的其实是矩阵的翻转

比如a=[1,2,3,4,5] , a[::-1]=[5,4,3,2,1]

具体可以那一张图试下就很清楚了可以参考如下代码:

import cv2

path="/home/pacs/桌面/xlc/FPN_Tensorflow-master/tools/inference_results/132.jpg"
img=cv2.imread(path)
img1=cv2.imread(path)[:, :, ::-1]
img2=cv2.imread(path)[:, ::-1, ::-1]
maxeps=150
eps = range(1, maxeps+1, 1)
print(eps)
print(img.shape[1])
print(img[50,549,0],img[50,549,1],img[50,549,2])#图片大小shape[1]是600,故599-50=549
print(img1[50,50,0],img1[50,50,1],img1[50,50,2])
print(img2[50,50,0],img2[50,50,1],img2[50,50,2])
a='python'
b=a[::-1]
print(b) #nohtyp
c=a[::-2]
print(c) #nhy
cv2.namedWindow("Image")
cv2.imshow("Image", img)
cv2.namedWindow("Image1")
cv2.imshow("Image1", img1)
cv2.namedWindow("Image2")
cv2.imshow("Image2", img2)
cv2.waitKey (0)

3.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)
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)

np.expand_dims(a, axis=X)表示在X位置添加数据

4.python中当a.shape为3*2,b.shape为3*1。a×b的效果为每列a对应点成b,结果3*2。

import numpy as np
a = np.array([[1,2],[3,4],[5,6]])
print(a)
print(a.shape)
resolution = np.array([1.5,1.5,1.5])
print(resolution.shape)
print(np.expand_dims(resolution,1))
print(np.expand_dims(resolution,1).shape)
print(np.expand_dims(resolution,1)*a)

5.np.floor(box).astype('int') 将矩阵box向下取整并设置为int类型

6.np.vstack沿着竖直方向将矩阵堆叠起来,np.hstack沿着水平方向将数组堆叠起来。

7.逻辑矩阵a和b,例如a=np.array([False]),b=np.array([True]),那么a+b相当于矩阵中对应位置a或b运算,而a^b相当于矩阵中敌营位置a异或b运算。相当于相同返还False,不同返回True。1-a=[1],1-b=[0]

8.np.concatenate 在实践过程中,会经常遇到数组拼接的问题,基于numpy库concatenate是一个非常好用的数组操作函数。a.传入的参数必须是一个多个数组的元组或者列表。b.另外需要指定拼接的方向,默认是 axis = 0,也就是说对0轴的数组对象进行纵向的拼接(纵向的拼接沿着axis= 1方向);注:一般axis = 0,就是对该轴向的数组进行操作,操作方向是另外一个轴,即axis=1。

9.np.copy().若对初始变量进行改变,普通的等号会让关联的变量发生相同的改变(以前竟然没有注意到Python的这个特性),np.copy()的变量则不会改变.

import numpy as np 
a = np.array([1, 2, 3])
>>> b = a
>>> c = np.copy(a)
>>> a
array([1, 2, 3])
>>> b
array([1, 2, 3])
>>> c
array([1, 2, 3])
>>> a[0] = 4
>>> a
array([4, 2, 3])
>>> b
array([4, 2, 3]) # 普通的python等号会通过关联让相等的变量发生改变
>>> c
array([1, 2, 3]) # 通过np.copy则不会改变

10.pytorch中unsqueeze()函数unsqueeze(1)是在第一维尺度后面增加一个维度a的维度为(2,3),a.unsqueeze(1)的维度为(2,1,3)

11.pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax链接https://blog.csdn.net/hbu_pig/article/details/81454503#expand

12.torch 的view函数 a = torch.Tensor(2, 3,4),a.view(3, -1)的shape为[torch.FloatTensor of size 3x8]。

13.torch 的transpose函数交换维度 a = torch.Tensor(2, 3,4),a.transpose(1, 2)的shape为[torch.FloatTensor of size 2x4x3]

14.np.tile 参考https://www.jianshu.com/p/9519f1984c70

15.slice = random.sample(list, 5)从list中随机获取5个元素,作为一个片段返回。

16.tensorflow中用来拼接张量的函数tf.concat(),用法:tf.concat([tensor1, tensor2, tensor3,...], axis)

这里解释了当axis=0和axis=1的情况,怎么理解这个axis呢?其实这和numpy中的np.concatenate()用法是一样的。

axis=0     代表在第0个维度拼接

axis=1     代表在第1个维度拼接 

参考:https://blog.csdn.net/leviopku/article/details/82380118

17.np.newaxis函数的用法。sliceim = sliceim2[np.newaxis,...]#np.newaxis 增加一个维度<type 'tuple'>: (307, 263, 330)到<type 'tuple'>: (1, 307, 263, 330)

18.torch.cat( )函数用法:output = torch.cat([output4,output3,output2],0)

output4,output3,output2分别为torch.Size([331776, 5])、torch.Size([41472, 5])、torch.Size([5184, 5])。

output 的尺寸为torch.Size([378432, 5])。

和np.concatenate()用法是一样的

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值