Numpy—day3方法集锦

ndarray的矩阵操作

基本矩阵操作
  • 加法
nd = np.random.randint(0, 10, size=(5, 4))
# 矩阵加上单个数值相当于每个基本元素都加上该值
nd + 3 
  • np.add()求和
    不对原数组产生影响
# 矩阵上每个数值都加上10
np.add(nd, 10)
# 矩阵相加
np.add(nd, nd)
  • np.multiply()乘积
    不对原来的结果产生影响
np.multiply(nd, 10)
  • 矩阵乘积np.dot
    a矩阵列数必须等于b举证的行数
np.dot(a, b)
  • 三维乘一维
  • 三维乘二维
广播机制

两条规则
1. 为缺失的维度补1
2. 假定缺失元素用已有值填充

nd1 = np.ones((2, 3))
nd1
>>>array([[1., 1., 1.],
         [1., 1., 1.]])

nd2 = np.arange((3))
nd2
>>>array([0, 1, 2])

nd1 + nd2
>>>array([[1., 2., 3.],
         [1., 2., 3.]])

ndarray的排序

方法一:

nd = np.random.randint(0, 150, size=10)
for i in range(nd.size):
    for j in range(i, nd.size):
        if nd[i] > nd[j]:
            nd[i], nd[j] = nd[j], nd[i]
nd

方法二:

def sort_nd(nd):
    for i in range(nd.size):
        # 不加上i索引会乱
        min_index = nd[i:].argmin() + i
        nd[i], nd[min_index] = nd[min_index], nd[i]
sort_nd(nd)
nd
快速排序

np.sort()与ndarray.sort()都可以,但有区别:
* np.sort()不改变输入
* ndarray.sort()本地处理,不占用空间,但改变输入

nd = np.random.randint(0, 10, size=10)
np.sort(nd)  # 不改变原数组

nd.sort()  # 改变原数组
print(nd2)  
部分排序
nd = np.random.randint(0, 1000, size=100)

np.partition(nd, -5)[-5:]  # 最大的五个数

np.partition(nd, 5)[:5]  # 最小的五个数(未排序)
np.sort(np.partition(nd, 5)[:5])

图片换脸

需要从cv2库
安装cv2库:pip install opencv-python

import numpy as np
import cv2
import matplotlib.pyplot as plt
  1. 导入图片
sanpang = cv2.imread('./jinzhengen.png')
sanpang
plt.imshow(sanpang[:, :, ::-1])  # 展示图片(rgb改变)
  1. 导入要替换的脸
dog = cv2.imread('dog.jpg')
dog
plt.imshow(dog[:, :, ::-1])
  1. 识别人脸区域, 需要算法(已经自动提供)
face_det = cv2.CascadeClassifier('./data/haarcascade_frontalface_default.xml')
  1. 使用算法自动寻找三胖的脸
# 得到一个ndarray,是人脸的区域
face_zone = face_det.detectMultiScale(sanpang)
face_zone
  1. 裁切狗脸
dog_face = dog[40:180, 70:240]  # 根据图片裁切脸部区域
dog_face.shape
  1. 压缩狗脸
dog_face2 = cv2.resize(dog_face), (61, 61))
plt.imshow(dog_face2)
  1. 进行循环
for x, y, w, h in face_zone:
    sanpang[y:y+w, x:x+w] = dog_face2
  1. 查看效果
plt.imshow(sanpang[:, :, ::-1])
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值