1. np.squeeze

一,np.squeeze
"""
np.squeeze  删除单维度的条 对多维度无效
"""
import numpy as np
a=np.array([[1,2],[3,4],[4,5]])
print(a)
print(a.shape)
b=np.squeeze(a)
print(b)

c=a.reshape(1,6,1)
print(c)
print(np.squeeze(c))
print(np.squeeze(c).shape)

print(np.squeeze(c,axis=0))
print(np.squeeze(c,axis=0).shape)

print(np.squeeze(c,axis=1))
print(np.squeeze(c,axis=1).shape)

维度不为1,报错。

print(np.squeeze(c,axis=2))
print(np.squeeze(c,axis=2).shape)

2.np.newaxis增加维度

import  numpy as np
a=np.arange(1,5)
print(a)
print(a.reshape([-1,1]))
b=a[:,np.newaxis]
print(b)
print(b.shape)

3. np.random

import numpy as np
"""
0~1之间产生随机值
"""
a=np.random.rand(3,2)
print(a)

"""
产生标准正态分布的值
"""
a=np.random.randn(3,2)
print(a)

"""
产生随机整数1~3之间
"""
a=np.random.randint(low=1,high=3,size=(3,2))
print(a)

"""
产生高斯分布:均值 方差
"""
a=np.random.normal(loc=0,scale=1,size=(3,2))
print(a)

numpy.random.choice(a, size=None, replace=True, p=None)

从给定的一维数组中生成一个随机样本

参数 参数意义
a 为一维数组或者int数据;
size 为生成的数组维度;
replace 是否原地替换;
p 为样本出现的概率;
np.random.choice(5,3) # 等价于np.random.randint(0,5,3)

replace为true会重复,为false不会重复

a = ['bird', 'meh', 'sad', 'd', '123']
print(np.random.choice(a, 5))  # replace默认为True
print(np.random.choice(a, 5, replace=False))

4. np.logspace

import  numpy as np
#等比数列 9/(5-1)=2.25  10^0 10^2.25 10^5.5 10^7.75 10^9
a=np.logspace(0,9,5)
print(a)

5. 等差数列

a=np.linspace(2.0, 3.0, num=5)
print(a)
b=np.linspace(2.0, 3.0, num=5, endpoint=False)
print(b)
c=np.linspace(2.0, 3.0, num=5, retstep=True)
print(c)

6. np.argmax,np.sum

np.max操作也满足记住, 0列1行, 0从上往下看,1从左往右看

#axis=0 对列操作 axis=1 对行操作 axis=2 对最后一根轴操作
a = np.array([[1, 2,3],[3, 4,5],[4, 5,6],[6, 7,8]])
print(np.mean(a,axis=0))
print(np.sum(a,axis=0))
print(np.argmax(a,axis=0))
print(np.all(a==2,axis=0))

#axis = 2对最后一根轴操作
a=a.reshape((2,2,3))
print(a)
print()
print(np.mean(a,axis=0))
print()
print(np.mean(a, axis=1))
print()
print(np.mean(a, axis=-1))

a=np.array([[1,0,0],[0,1,0],[0,0,1],[0,1,0]])
print(a)
print(np.argmax(a,1))#对行找最大值索引
b=np.array([[1,0,0],[0,1,0],[1,0,0],[0,0,1]])
print(b)
print(np.argmax(b,1))print(np.argmax(a,1)==np.argmax(b,1))
print(np.sum(np.argmax(a,1)==np.argmax(b,1)))

img=np.array([[[1,2,3],[6,4,5]]])
print(img)
pre=np.argmax(img,axis=2)
print(pre)
pre=np.expand_dims(pre,axis=-1)
print(pre)

找出每个channel的最值索引,然后进行分割。

np.sum

import numpy as np
a=np.array([[[[1,2],[1,3],[1,4]],[[1,7],[1,6],[1,5]],[[1,2],[1,3],[1,4]]]])print(a.shape)
print(np.sum(a,axis=3))
print(np.sum(a,axis=3).shape)
print(np.sum(a,axis=3,keepdims=True))
print(np.sum(a,axis=3,keepdims=True).shape)

保持维度故变为(1,3,3,1)

对于三维的话 比如(m,32,32,17)是由每一个channel贡献loss

a=np.array([[[[1,2,3]],[[2,3,4]]],[[[1, 2, 3]],[[2, 3, 4]]]])
print(a)
print(a.shape)
print(np.sum(a, axis=0))
print(np.sum(a,axis=1))
# print(np.sum(a, axis=2))
# print(np.sum(a, axis=3))
print(np.mean(np.sum(a,axis=1)))

xe = -tf.reduce_sum(tf.multiply(labels_ * tf.log(logits + epsilon), cb),reduction_indices=[1])loss_total = tf.reduce_mean(xe)+m_IOU_loss

np.all(),和sum一样axis=1,是行操作。沿着轴的方向都为true,则返回为true。

a=np.all([[True, False],[True, True]])
print(a)a = np.all([[True, False],[True, True]],axis=1)
print(a)a = np.all([[1, 0],[1, 1]], axis=1)
print(a)

可用来清掉,全0的元素。

x=np.array([[0,1,0,1],[0,200,1,0],[34,40,0,3],[35,0,3,4],[0,0,0,0]])
print(np.all(x == 0, axis=1))y=x[~np.all(x == 0, axis=1)]
print(x)
print(y)

7. np.stack,np.hstack,np.vstack

np.stack二维情况

import numpy as np
a=[[1,2,3],[4,5,6]]
print("列表a如下:")
print(a)print("增加一维,新维度的下标为0")
c=np.stack(a,axis=0)
print(c)print("增加一维,新维度的下标为1")
c=np.stack(a,axis=1)
print(c)

a=[[1,2,3],[4,5,6]]
b=[[1,2,3],[4,5,6]]
c=[[1,2,3],[4,5,6]]
print("a=",a)
print("b=",b)
print("c=",c)print("增加一维,新维度的下标为0")
d=np.stack((a,b,c),axis=0)
print(d)
print(d.shape)print("增加一维,新维度的下标为1")
d=np.stack((a,b,c),axis=1)
print(d)
print(d.shape)
print("增加一维,新维度的下标为2")
d=np.stack((a,b,c),axis=2)
print(d)
print(d.shape)

np.hstack按照水平方向连接

import numpy as np
a=[[1],[2],[3]]
b=[[1],[2],[3]]
c=[[1],[2],[3]]
d=[[1],[2],[3]]
print(np.hstack((a,b,c,d)))

np.vstack按垂直方向连接

import numpy as np
a=[[1],[2],[3]]
b=[[1],[2],[3]]
c=[[1],[2],[3]]
d=[[1],[2],[3]]
print(np.vstack((a,b,c,d)))

把sober算子变成两个通道的sober算子,其中生成的2用作刚好是输入的channel

import tensorflow as tf
import numpy as np
fx = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]).astype(np.float32)
fy = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]]).astype(np.float32)fx = np.stack((fx, fx), axis=2)
print(fx)
# fy = np.stack((fy, fy), axis=2)
# print(fy)
fx = np.reshape(fx, (3, 3, 2, 1))
print(fx)
# fy = np.reshape(fy, (3, 3, 2, 1))tf_fx = tf.Variable(tf.constant(fx))

8. np.array

>>> a
array([0, 2, 1])
>>> scores
array([[1, 2, 3],
       [2, 3, 4],
       [4, 5, 6]])
>>> scores[a]
array([[1, 2, 3],
       [4, 5, 6],
       [2, 3, 4]])

一个样本对应一列,下面的代码可以用来寻找每个样本标签量对应的数值。

9. np.concatenate

import numpy as np
a = np.array([[1, 2], [3, 4]])
b=np.array([[5,6]])
c=np.concatenate((a, b), axis=0)
print(c)
c=np.concatenate((a, b.T), axis=1)
print(c)
c=np.concatenate((a, b.T), axis=None)
print(c)

对于列表也可以 
a=np.concatenate([[[1,2]],[[3,4]]],axis=0) print(a)

10.  np.transpose()

import numpy as np
a=np.array([[1],[2],[3],[4],[5],[6]])
print(a)
b=a[:2,:].transpose()
c=a[2:4,:].transpose()
d=a[4:,:].transpose()
print(b,c,d)
e=np.append(b,c,axis=0)
a=np.append(e,d,axis=0)
print(a)

11. one_hot

import numpy as np
#转换one-hot
def convert_to_one_hot(label):n_classes=max(label)+1label = np.eye(n_classes)[label.reshape(-1)]return label
label=[1,0,2,3,0]
Y=convert_to_one_hot(np.array(label))
print(Y)


12. np广播机制

13. np.split

方便对生成的box坐标进切分

import  numpy as np
A = np.arange(16).reshape(4,4)
print('A:',A)
print(np.split(A,2,axis = 1))
c,d=np.split(A,2,axis = 1)
print(c)
print(d)

import  numpy as np
A = np.arange(16).reshape(4,4)
print(A)
print(np.split(A,2,axis = 0))
c,d=np.split(A,2,axis = 0)
print(c)
print(d)


14. np.rot90,图片旋转90度

path='./data/2.png'
img=cv2.imread(path)# 逆时针90度
img=np.rot90(img)
cv2.imwrite('./data/img_size_out_1.jpg',img)

15. np.unravel_index,找最值的索引值

a = np.array([[1, 2, 3],[4, 5, 6]])
index = np.unravel_index(np.argmax(a), a.shape)
print(index)

16. np.where

np.where两种用法

where(condition, x=None, y=None)

如果x,y为空,返回condition中值为True的位置的ndarray

对于三维


#三维情况
import numpy as npb = np.where([[0, 1],[1, 0]])
print('==b:', b)
x = np.arange(12).reshape(2, 3, 2)
print('==x:', x)index = np.where(x > 3)
print('==index:', index)
print('==x[index]:', x[index])

对于二维


import numpy as npb = np.where([[0, 1],[1, 0]])
print('==b:', b)
x = np.arange(9.).reshape(3, 3)
print('==x:', x)index = np.where(x > 3)
print('==index:', index)
print('==x[index]:', x[index])
index_y, index_x = index
print('==index_y, index_x:', index_y, index_x)need_value = []
for i in range(len(index_y)):need_value.append(x[index_y[i]][index_x[i]])
print('==need_value:', need_value)# 同时满足两个条件的
index = np.where((x[:, 0] > 3) & (x[:, 1] < 8))
print('==index', index)
print('x[index]:', x[index])

对于一维

class_ids=np.array([1,2,3])
index = np.where(class_ids == 1)
print('==index:', index)
print('==class_ids[index]:', class_ids[index])

如果x,y不为空,返回值和x、y有相同的形状,如果condition对应位置值为True那么返回ndarrayr对应位置为x的值,否则为y的值

a=np.where([[True, False],[True, True]],[[1, 2],[3, 4]],[[9, 8],[7, 6]])
print(a)

可以用来找出某个点的索引

a = np.array([[255, 0, 0],[0,0,255],[0,255,0]])
# 找出255的索引号
b=np.where(a[...]==255)
print(b)
y,x=b#是索引号,故行对应y,列对应x
print(y)
print(x)
point=np.stack((x,y),axis=-1)
plt.plot(point[:,0],point[:,1],'o')
plt.show()

同时要满足两个np.where

        index_x = np.where(abs(points[:, 0] - points[0][-2]) < x_dis)[0]print('index_x:',index_x)# if len(index_x):#     #y1-y1index_y = np.where(abs(points[:, 1] - points[0][1]) < y_dis)[0]print('index_y: ',index_y)common_index=list(set(index_x)&set(index_y))print('common_index:',common_index)

更简单写法:


kpts_2d = np.array([[680, 0],[10, 10]], dtype=np.float32)
print((kpts_2d[:, 0] < 640)*(kpts_2d[:, 0] >= 0))
kpts_2d = kpts_2d[(kpts_2d[:, 0] < 640)*(kpts_2d[:, 0] >= 0)]print(kpts_2d)

例如centernet中用于后处理找到每一类对应的类别,长宽与偏移量

import numpy as np# (c, h, w)
cls = np.array([[[0.5, 0.2],[0.9, 0.8],[0.8, 0.1]],[[0.6, 0.7],[0.8, 0.6],[0.9, 0.8]]])
# (2, h, w)
wh = np.array([[[5, 2],[9, 8],[8, 1]],[[6, 7],[8, 9],[9, 1]]])# (2, h, w)
reg = np.random.rand(2, 3, 3)
print('==reg:', reg)print('==cls.shape:', cls.shape)
index = np.where(cls >= 0.8)
print('==index:', index)
score = np.array(cls[index])
print('==score:', score)
cat = np.array(index[0])
print('===cat:', cat)
ctx, cty = index[-1], index[-2]
print('==before ctx, cty', ctx, cty)
w, h = wh[0, cty, ctx], wh[1, cty, ctx]  # 预测的长宽
print('==w, h:', w, h)
off_x, off_y = reg[0, cty, ctx], reg[1, cty, ctx]  # 预测的中心点偏移量
print('==off_x, off_y:', off_x, off_y)
ctx = np.array(ctx) + np.array(off_x)  # 中心点x
cty = np.array(cty) + np.array(off_y)  # 中心点y
print('==after ctx, cty', ctx, cty)x1, x2 = ctx - np.array(w) / 2, ctx + np.array(w) / 2
y1, y2 = cty - np.array(h) / 2, cty + np.array(h) / 2
bbox = np.stack((cat, score, x1, y1, x2, y2), axis=1).tolist()
bbox = sorted(bbox, key=lambda x: x[1], reverse=True)
print('==bbox:', bbox)

17. argsort,可用来寻找score的最大值

scores=np.array([0.5,0.7,0.3,0.2])
#得到从小到大的索引值
print(scores.argsort())
# 得到从大到小的索引值
print(scores.argsort()[::-1])
for i in scores.argsort()[::-1]:print(scores[i])

a=np.array([1,3,0,2])
b=np.argsort(a)
print(b)a = np.array([[1, 5, 0, 8],[ 3, 4, 7, 3]])
ind = np.unravel_index(np.argsort(a, axis=None), a.shape)
print(ind)
print(ind[0][-1],ind[1][-1])print(a[ind[0][-1],ind[1][-1]])
print(a[ind[0][-2], ind[1][-2]])

18. np.delete

import numpy as np
a = np.array(np.arange(12).reshape(3, 4))
print(a)
#沿着行删除,删除第一行
print(np.delete(a,obj=1,axis=0))
# 沿着行删除,删除第0行和第一行
print(np.delete(a, obj=[0,1], axis=0))
# 沿着列删除,删除第三列
print(np.delete(a, obj=3, axis=1))#删除多个行
print(np.delete(a, obj=[0,1], axis=0))

19. np.tile,沿着行和列复制

沿着列复制

mat = np.array([[1,2],[3, 4]])
mat=np.tile(mat,(1,3))
print(mat)

沿着行复制

mat = np.array([[1,2],[3, 4]])
mat=np.tile(mat,(3,1))
print(mat)

20. np.prod连乘

a=np.array([[1,2],[3,4]])
print(np.prod(a))
print(np.prod(a,axis=0))
print(np.prod(a, axis=1))

21.np.reshape,flatten()

a=np.array([[1,2]],dtype=np.float32)
print(a.reshape(-1))
print(a.flatten().astype(np.int32))

得到的每一列代表每一个channel

a=np.array([[[1,0,1],[1,1,0]],[[0,1,1],[0,1,0]]])
print(a)
print(a.shape)
b=a.reshape(-1, a.shape[-1])
print(b)
print('============')
"""转置方便求交集"""
print(b.T)

制作阈值大于0.5预测的mask.

masks1=np.array([[0.6,1,0],[0.2,0,1],[0.3,1,0],[0.6,0,1]])
print(masks1.shape[-1])
masks1 = np.reshape(masks1 > .5, (-1, masks1.shape[-1]))
print(masks1)

总的计算多个channel的IOU

def compute_overlaps_masks(masks1, masks2):"""Computes IoU overlaps between two sets of masks.masks1, masks2: [Height, Width, instances]"""# If either set of masks is empty return empty resultif masks1.shape[-1] == 0 or masks2.shape[-1] == 0:return np.zeros((masks1.shape[-1], masks2.shape[-1]))# flatten masks and compute their areasmasks1 = np.reshape(masks1 > .5, (-1, masks1.shape[-1])).astype(np.float32)masks2 = np.reshape(masks2 > .5, (-1, masks2.shape[-1])).astype(np.float32)area1 = np.sum(masks1, axis=0)area2 = np.sum(masks2, axis=0)# intersections and unionintersections = np.dot(masks1.T, masks2)union = area1[:, None] + area2[None, :] - intersectionsoverlaps = intersections / unionreturn overlaps

22. np 切片

a= np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9],[10, 11, 12]])
b = np.array([0, 2, 0, 1])
print(a[np.arange(4),b])
a[np.arange(4), b]+=10
print('a=',a)

#所有大于5的替换为5
MAX = 5
nums = np.array([1, 4, 10, -1, 15, 0, 5])
print(nums > MAX)
nums[nums > MAX] = MAX
print(nums)

#直接根据索引找到一行向量的值
nums = np.array([1, 4, 10, -1, 15, 0, 5])
print(nums[[1, 2, 3, 1, 0]])

23. np.flatnonzero与np.nonzero(x)

(1)np.flatnonzero

该函数输入一个矩阵,返回拉伸后矩阵中非零元素的索引

x = np.arange(-3, 5)
print('x=',x)
print(np.flatnonzero(x))
print(np.flatnonzero(x==-3))

(2)np.nonzero(x), 返回非零元素的索引

x = np.array([[3, 0, 0], [0, 4, 0], [5, 6, 0]])print(x)res = np.nonzero(x)print('res:', res)res_ = x[np.nonzero(x)]print('res_:', res_)

24. np.bincount统计元素出现的次数

x = np.array([0, 1, 2, 2, 1, 1])
print(np.bincount(x))

25. 求交集np.intersect1d

print(np.intersect1d([1, 3, 4, 2], [3, 1, 2, 1]))

26. np.arctan2与np.arctan

x = np.array([-1, +1, +1, -1])
y = np.array([-1, -1, +1, +1])
#-180~180
print(np.arctan2(y, x) * 180 / np.pi)
#-90~90
print(np.arctan(y/x) * 180 / np.pi)

27. np.transpose

path='./data/raw.jpg'
img=cv2.imread(path)
img=np.transpose(img,(1,0,2))
cv2.imwrite('./data/raw_1.jpg',img)

实现图片转90度

变为

上下翻转                                    左右翻转                              BGR变为RGB

img=img[::-1,...]        img=img[:,::-1,:]       img=img[:,:,::-1]

    

28. np.zeros

a=np.zeros((1,2,3))
print(a)
a[0,1,:]=255
print(a)

29. 返回上三角的索引,可用来制作显示下三角的相关系数矩阵。np.triu_indices_from()

import numpy as np
mask=np.array([[1,2,3],[4,5,6],[5,6,7]])
print(mask)
print(np.triu_indices_from(mask))
mask[np.triu_indices_from(mask)] = True
print(mask)

30. random.getrandbits(1)用来产生0,1其中之一的随机数,用来做数据增强

import random
for i in range(10):a = random.getrandbits(1)print(a)if a:print(True)

31. np.fliplr,np.flipud实现左右 上下翻转

32. np.random.shuffle

import numpy as np
X=np.array([[1,2,3],[3,4,5],[5,6,7],[7,8,9]])
print(X)
idx_random = np.arange(X.shape[0])
print(idx_random)
np.random.shuffle(idx_random)
print(idx_random)
X= X[idx_random]
print('==========after shuffle=============')
print(X)

33.np.clip

将小于3的和大于8的强制为3和8

x = np.array([[1, 2, 3, 5],[6, 7, 8, 9]])
print('x=', x)
y = np.clip(x, 3, 8)
print('y=', y)
#等价于
x[x>=8]=8
x[x<=3]=3
print('x=', x)

34.np.percentile求百分位数,可用来确定卫星图像的RGB三个波段的阈值,方便进行0~255归一化处理,其中取值为50时相当于求中位数。

a=np.array([[1,2,3,4],[0,1,2,0]])
print(a[a>0])
print(np.percentile(a[a>0],50))
print(np.percentile(a, 50))

35. np.ploy1d 多项式子

print(np.poly1d(3))
print('=============')
print(np.poly1d([1,2,3,4]))

36. np.exp,注意数值不稳定问题

f = np.array([123, 456, 789])  # 例子中有3个分类,每个评分的数值都很大
p = np.exp(f) / np.sum(np.exp(f))  # 不妙:数值问题,可能导致数值爆炸
print('p=',p)
# 那么将f中的值平移到最大值为0:
f -= np.max(f)  # f becomes [-666, -333, 0]
p = np.exp(f) / np.sum(np.exp(f))  # 现在OK了,将给出正确结果
print('p=', p)

37. np.r_,np.c_,类似np.vstack.np.hstack

import numpy as np
a = np.array([[1, 2],[3,4]])
b = np.array([[4, 5],[6,7]])
c = np.c_[a,b]print(np.r_[a,b])
print(np.c_[a,b])
print(np.c_[c,a])

38. 实现max(0, Sjc - Sjyj + 1)

第一种解法 :

x1 = np.array(np.arange(6)).reshape(3, 2)
x2 = np.array([2, 3, 3]).reshape(-1, 1)
print('x1=')
print(x1)
print('x2=')
print(x2)
print('x1-x2+1=')
print(x1-x2+1)
mask=x1-x2+1>0
print('mask=')
print(mask)
scores=(x1-x2+1)*mask
print('scores=')
print(scores)

第二种解法:

x1 = np.array(np.arange(6)).reshape(3, 2)
x2 = np.array([2, 3, 3]).reshape(-1, 1)
for i in range(x1.shape[0]):for j in range(x1.shape[1]):x1[i][j] = max(0, x1[i][j] - x2[i][0] + 1)
print(x1)

39. label smoothing,制作平滑的标签

new_labels = (1.0 - label_smoothing) * one_hot_labels + label_smoothing / (num_classes-1)

label_smoothing是一个很小的常数

40. np.unique 去重(可以对坐标)

a=np.unique([1, 1, 2, 2, 3, 3])
print(a)
a = np.array([[1, 1], [2, 3]])
print(np.unique(a))a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
print(np.unique(a, axis=0))

41. np.pad

用来补黑边,变成1024×1024

_, ax = plt.subplots(1, figsize=(16, 16))
ax.axis('off')
image=cv2.imread('1.jpg')
print(image.shape)
h, w = image.shape[:2]
max_dim=1024
top_pad = (max_dim - h) // 2
bottom_pad = max_dim - h - top_pad
left_pad = (max_dim - w) // 2
right_pad = max_dim - w - left_pad
padding = [(top_pad, bottom_pad), (left_pad, right_pad), (0, 0)]
image = np.pad(image, padding, mode='constant', constant_values=0)
cv2.imwrite('2.jpg',image)
# ax.imshow(image)
# plt.show()

42. np.cumsum累加

stage_epochs=[50,50,50]
a=np.cumsum(stage_epochs)[:-1]
print(a)

43. 交换二维数据的列向量

print(coord_Y)
coord_Y[:, [0, 1]] = coord_Y[:, [1, 0]]
print(coord_Y)

44. 将一个二维数组按照X先排序,Y在排序,np.lexsort

def coord_sort(x,y):
#按照x,y来排序ind = np.lexsort((y.tolist(), x.tolist())) # Sort by x, then by ycoord = [(x.tolist()[i], y.tolist()[i]) for i in ind]coord = np.array(coord).reshape(-1, 2)return coordcoord = np.array([[10, 60],[10, 20],[20, 20],[40, 40],[40, 60],[20, 40]])#按照先X后Y排的序coord_X=coord_sort(coord[:,0],coord[:,1])print(coord_X)

四个点的

import numpy as np
def coord_sort(points):# 按照x,y来排序ind = np.lexsort((points[:,1].tolist(), points[:,0].tolist()))  # Sort by x, then by yreturn points[ind]coord = np.array([[10, 60, 10,20],[11, 70, 20, 20],[11, 40,40,60],[30, 20,200,100],[30, 30,40,50]])
# 按照先X后Y排的序
coord_X = coord_sort(coord)
print(coord_X)

45. 删除副黑色图片中过短的白线

import numpy as np
def delete_short_line(img,line_length):sum_axis = np.sum(img == 255,axis=0,keepdims=True)print('sum_axis:',sum_axis)print('sum_axis>line_length:',sum_axis>line_length)img = img*(sum_axis>line_length)return  img
if __name__ == '__main__':img=np.array([[255,0,0],[255,0,255],[255,255,0]])img=delete_short_line(img,line_length=1)print('==img==')print(img)

46.对竖值方向的一系列点做聚类

import numpy as np
def get_cluster(mode,x_dis,y_dis):points=np.array([[3,2],[10,2],[1,4],[2,5],[1,3],[12,3],[15,4],[10,5],[20,1]])if mode == 'veri':points = points[points[:,0].argsort()]else:points = points[points[:,1].argsort()]# print(points)# print(points.shape[0])cluster = []while points.shape[0] > 2:# print('points:',points)if mode=='veri':index = np.where(abs(points[:, 0] - points[0][0]) < x_dis)[0]else:index = np.where(abs(points[:, 1] - points[0][1]) < y_dis)[0]index = sorted(index)cluster.append(points[index])points=points[index[-1]+1:]print('cluster:',cluster)return cluster
if __name__ == '__main__':get_cluster(mode='veri',x_dis=5,y_dis=5)

47. np.max,np.maximum

np.max是计算最大值,而np.maximum是计算相比较的值

a=np.array([1,2,3])
print(np.max(a))
print(np.maximum(a,2))

48. np.setdiff1d,可以得到一个ndarray中有,一个无

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
b = np.array([3, 4, 7, 6, 7, 8, 11, 12, 14])
c = np.setdiff1d(a, b)
print('a中有,b中无')
print('c:', c)

49. np.count_nonzero得到非零元素个数

a=np.count_nonzero([[0, 1, 7, 0, 0],[3, 0, 0, 2, 19]], axis=0)print('a:', a)

50.np.nonzero得到非零元素索引

 x = np.array([[3, 0, 0],[0, 4, 0],[5, 6, 0]])a = np.nonzero(x)print('a:', a)

51.np.diff

矩阵中后一个元素减去前一个元素的差值,此处用于找到polygon的四个点(局限于水平框)

import numpy as nprect = np.zeros((4,2))# pts = np.array([[0, 0],#                 [0, 2],#                 [2, 2],#                 [2, 0]])pts = np.array([933,255,954,255,956,277,936,277])pts = pts.reshape(-1,2)print('===pts', pts)d = np.diff(pts, axis=1)print('===d:', d)s = np.sum(pts, axis=1)rect[0] = pts[np.argmin(s)]rect[2] = pts[np.argmax(s)]# the top-right point will have the smallest difference,# whereas the bottom-left will have the largest differenced = np.diff(pts, axis=1)rect[1] = pts[np.argmin(d)]rect[3] = pts[np.argmax(d)]print('===rect:', rect)

利用np.argmin找到框的最小点,再用np.roll滚动获取最小点开始的点(局限于框是有顺序的,不是乱序)

#得到左上右下
def cal_stand_points(points):s = np.sum(points, axis=1)left_top_index = np.argmin(s)right_bottom_index = np.argmax(s)rect = np.roll(points, 4-left_top_index, axis=0)return rectpts = np.array([933, 255, 954, 255, 956, 277, 936, 277])
pts = pts.reshape(-1, 2)
new_pts = cal_stand_points(pts)
print('==new_pts:', new_pts)

52.np.meshgrid生成网格点

import numpy as np
import matplotlib.pyplot as pltx = np.array([0, 1, 2])
y = np.array([0, 1])X, Y = np.meshgrid(x, y)
print('==X:', X)
print('==Y:', Y)plt.plot(X, Y,color='red',  # 全部点设置为红色marker='.',  # 点的形状为圆点linestyle='')  # 线型为空,也即点与点之间不用线连接
plt.xlim(-1, 3)
plt.ylim(-1, 2)
plt.grid(True)
plt.show()

其中X代表横坐标 Y代表纵坐标

53.np.linalg.norm计算范数(默认计算2范数)

1.得到两个向量角度

import mathfeature0 = np.array([1, 1])
feature1 = np.array([2, 2])
x0 = feature0 / np.linalg.norm(feature0)
print('==x0:', x0)
x1 = feature1 / np.linalg.norm(feature1)
print('==x1:', x1)
cosine = np.dot(x0, x1)
print('==cosine:', cosine)
cosine = np.clip(cosine, -1.0, 1.0)
theta = math.acos(cosine)
theta = theta * 180 / math.pi
print('===theta:', theta)

2.得到box长宽

box = np.array([[0, 0],[2, 0],[2, 1],[0, 1]])w, h = np.linalg.norm(box[0] - box[1]), np.linalg.norm(box[1] - box[2])
print('宽度:{},长度:{}'.format(w, h))

54.np.roll滚动(默认axis是1)

x = np.arange(10)
print('x:',x)
y = np.roll(x, 2)
print('==y:', y)x2 = np.reshape(x, (2,5))
print('==x2:', x2)y2 = np.roll(x2, 1)
print('==y2:', y2)y3 = np.roll(x2, 1, axis=0)
print('===y3:', y3)
y4 = np.roll(x2, 2, axis=1)
print('====y4:', y4)

55:计算矩形的相邻边长度与周长面积

import Polygon as plg
import cv2
def dist(a, b):return np.sqrt(np.sum((a - b) ** 2))bbox = np.array([[0, 0],[2, 0],[2, 1],[0, 1]])compute_1_area = plg.Polygon(bbox).area()
compute_2_area = cv2.contourArea(bbox)#方式3
compute_3_peri = cv2.arcLength(bbox, True)compute_1_peri, compute_2_peri = 0, 0
for i in range(bbox.shape[0]):print('==bbox[i], bbox[i + 1]:', bbox[i], bbox[(i + 1) % bbox.shape[0]])# 方式1compute_1_dis = dist(bbox[i], bbox[(i + 1) % bbox.shape[0]])print('===compute_1_dis:', compute_1_dis)compute_1_peri += compute_1_dis# 方式2compute_2_dis = np.linalg.norm(bbox[i] - bbox[(i + 1) % bbox.shape[0]])compute_2_peri += compute_2_disprint('===compute_2_dis:', compute_2_dis)print('方式1计算面积为:{},方式2计算面积为:{}'.format(compute_1_area, compute_2_area))
print('方式1计算周长:{},方式2计算周长:{},方式3计算周长:{}'.format(compute_1_peri, compute_2_peri, compute_3_peri))

56.np.linalg.eig计算特征值和特征向量

x = np.diag((1, 2, 3))
print('x:\n', x)
w, v = np.linalg.eig(x)
print('w:\n', w)
print('v:\n', v)

57.奇异值分解np.linalg.svd 

# 创建一个矩阵A: A = u s vt
# A = np.array([[0, 1],
#               [1, 1],
#               [1, 0]])
A = np.array([[4, 1, 3],[2, 2, 4]])
print('A:\n', A)# 对其进行SVD分解 s是对角矩阵的值
u, s, vt = np.linalg.svd(A, full_matrices=True)
print('u.shape, s.shape, vt.shape:', u.shape, s.shape, vt.shape)
res = np.dot(u*s, vt[:2, :])
print('res:', res)
#U UT=I
print('np.dot(u, u.T):\n', np.dot(u, u.T))
#v vT=I
print('np.dot(vt, vt.T):\n', np.dot(vt, vt.T))

58. np实现avg_pool和max_pool

import numpy as np
def pooling(inputMap, k = 3, s=1, pad=False, mode='max'):""":param inputMap::param k::param s::param pad::return:"""# inputMap sizesh, w = np.shape(inputMap)if pad:new_h, new_w = h, welse:new_h, new_w = (h - k)//s + 1, (w - k)//s + 1outputMap = np.zeros((new_h, new_w))# paddingif pad:padding = [(0, (h*s - s + k - h)//2 + 1), (0, (h*s - s + k - h)//2+1)]temp_map = np.pad(inputMap, padding, mode='constant', constant_values=0)else:temp_map = inputMapprint('===temp_map:', temp_map)# # max poolingfor i in range(0, new_h):for j in range(0, new_w):start_y = i * sstart_x = j * spool_region = temp_map[start_y:start_y+k, start_x:start_x+k]# print('===pool_region:', pool_region)if mode == 'max':value = np.max(pool_region)else:value = np.mean(pool_region)outputMap[i, j] = valueprint('==outputMap:', outputMap)return outputMap# 测试实例
# test = np.array([[1, 2, 3, 4],
#                  [5, 6, 7, 8],
#                  [9, 10, 11, 12],
#                  [10, 11, 13, 14]])
test = np.array([[1, 2, 3, 4, 5],[5, 6, 7, 8, 9],[9, 10, 11, 12, 13],[10, 11, 13, 14, 15],[10, 11, 13, 14, 15]])
test_result = pooling(test, k=3, s=1, pad=False, mode='max')
print('==test_result:', test_result)

59.实现高斯分布


import numpy as np
def get_gaussian_kernel(k=3, mu=0, sigma=1, normalize=True):# compute 1 dimension gaussiangaussian_1D = np.linspace(-1, 1, k)print('===gaussian_1D:', gaussian_1D)# compute a grid distance from centerx, y = np.meshgrid(gaussian_1D, gaussian_1D)print('===x:', x)print('===y:', y)distance = (x ** 2 + y ** 2) ** 0.5print('==distance:', distance)# compute the 2 dimension gaussiangaussian_2D = np.exp(-(distance - mu) ** 2 / (2 * sigma ** 2))gaussian_2D = gaussian_2D / (2 * np.pi *sigma **2)print('==gaussian_2D:\n', gaussian_2D)# normalize part (mathematically)if normalize:gaussian_2D = gaussian_2D / np.sum(gaussian_2D)return gaussian_2Dget_gaussian_kernel()

60.二维图片(图像索引)变三维(颜色)

常用于分割

seg = np.array([[0, 2, 3],[0, 1, 4]])
color_seg = np.zeros((seg.shape[0], seg.shape[1], 3), dtype=np.uint8)palette = [[0, 0, 0], [0, 0, 255], [0, 255, 0], [255, 0, 0], [255, 255, 0]]
for label, color in enumerate(palette):color_seg[seg == label, :] = color
print('==color_seg:', color_seg)

61.求解多元一次方程组

def test_np_slove():a = np.array([[1, 2, 3],[5, 23, 5],[4, 7, 9]])b = np.array([10,20,30])x = np.linalg.solve(a, b)print(x)print(np.sum(np.dot(a, x.reshape(3, 1)), axis=1))

62.利用数组索引获取每个值

target = np.array([[1, 2, 3],[4, 5, 6]])
idx = np.array([[0, 1],[1, 0],[0, 2],[0, 0],[1, 1],[1, 2]])
print('target[idx[:, 0], idx[:, 1]]', target[idx[:, 0], idx[:, 1]])

numpy基础知识点相关推荐

  1. Numpy基础知识点汇总

    全文共2371字,预计阅读时间15分钟. 概述 Numpy是高性能科学计算和数据分析的基础包,它的部分功能如下: 1)ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 2 ...

  2. NumPy基础操作(1)

    NumPy基础操作(1) (注:记得在文件开头导入import numpy as np) 目录: 数组的创建 强制类型转换与切片 布尔型索引 结语 数组的创建 相关函数 np.array(), np. ...

  3. PaddlePaddle领航团 OpenCV基础知识点总结

    PaddlePaddle领航团 OpenCV基础知识点总结 1.OpenCV基础 加载图片,显示图片,保存图片 OpenCV函数:cv2.imread(), cv2.imshow(), cv2.imw ...

  4. Python培训教程之Python基础知识点梳理

    Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...

  5. 自然语言处理算法工程师历史最全资料汇总-基础知识点、面试经验

    2019年秋招已过,零星的招聘任然在继续.本资源适用于NLP算法工程师面试,也适用于算法相关的其他岗位.整理了算法面试需要数学基础知识.编程语言.深度学习.机器学习.计算机理论.统计学习.自然语言处理 ...

  6. java重要基础知识点_必看 | 新人必看的Java基础知识点大梳理

    原标题:必看 | 新人必看的Java基础知识点大梳理 各位正在认真苦学Java的准大神,在这烈日炎炎的夏季里,老九君准备给大家带来一个超级大的"冰镇西瓜,"给大家清凉一下,压压惊. ...

  7. Python精讲Numpy基础,大牛笔记详细解释

    https://www.toutiao.com/a6664936105076326920/ 总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Pyth ...

  8. mysql 存储引擎 面试_搞定PHP面试 - MySQL基础知识点整理 - 存储引擎

    MySQL基础知识点整理 - 存储引擎 0. 查看 MySQL 支持的存储引擎 可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎: mysql> ...

  9. 布尔值_Python基础知识点手册——布尔值及布尔运算

    布尔值及布尔运算 布尔值有 True 和 False,布尔类型是整数类型的子类型,所以整数的运算都适用布尔值运算. issubclass(bool,int) True True + 1 2 ~True ...

最新文章

  1. php代码优化 -- array_walk 和 foreach, for 的效率的比较
  2. 3.2 matlab用if语句实现选择结构
  3. 2019牛客暑期多校训练营(第五场)C generator 2 (BSGS)
  4. zabbix html使用c语言写的,zabbix 自定义LLD
  5. 电商海报模板|psd分层海报素材轻松教你凸显你的主体产品!
  6. 基于检索的自然语言处理模型研究梳理
  7. ugui获取坐标_UGUI源码解析(六)Raycast
  8. [CTO札记]研究:日本Rakuten(乐天)
  9. KNN——机器学习实战_Python3
  10. Excel中关于数组函数的研究
  11. PPT汇报片配音及视频格式生成方法
  12. mac_excel_条件格式
  13. Qt中模态对话框的使用示例及accept()和reject()槽函数的使用
  14. rdl报表 mysql_SSRS报表服务随笔(rdl报表服务)-创建一个简单的报表
  15. OPENGL OSG setNearFarRatio可以动态调节远近剪裁面
  16. How to make a Speech Machine
  17. 设计一个采购、销售和客户管理应用数据库
  18. 趣味编程(一)——把图片转成文字图
  19. 2010年影楼发展趋势
  20. 华为手机应用签名异常

热门文章

  1. 知识图谱入门知识(二)事件抽取(EE)详细介绍
  2. 回顾经典,Netflix的推荐系统架构
  3. 技术动态 | 图对比学习的最新进展
  4. 论文浅尝 - CVPR2020 | 基于网格特征的可视问答系统
  5. 论文浅尝 - ICLR2020 | 通过神经逻辑归纳学习有效地解释
  6. 开源开放 | 《大词林》开源 75 万核心实体和围绕核心实体的细粒度概念、关系列表...
  7. 打造工业级推荐系统(三):推荐系统的工程实现与架构优化
  8. 论文笔记(Neural Graph Collaborative Filtering)
  9. 分布式系统:SpringBoot中Dubbo以及Zookeeper依赖包冲突 LoggerFactory is not a Logback LoggerContext but Logback
  10. Maven:解决jar包冲突和企业开发常用编写