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

1.np.where

where()的用法

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

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

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

[code]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]

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

[code]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:用于扩展数组的形状
[code]import numpy as np
In [12]:
a = np.array([[[1,2,3],[4,5,6]]])
a.shape
Out[12]:
(1, 2, 3)
[code]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。
[code]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()的变量则不会改变.

[code]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.unsqueeze()函数unsqueeze(1)是在第一维尺度后面增加一个维度a的维度为(2,3),a.unsqueeze(1)的维度为(2,1,3)

11.pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax链接

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]

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