zoukankan      html  css  js  c++  java
  • numpy库的学习笔记及自定义手绘风

    一、ndarray

    1、numpy 库处理的最基础数据类型是由同种元素构成的多维数组(ndarray),简称“数组”。

    2、ndarray是一个多维数组的对象,ndarray数组一般要求所有元素类型相同,数组下标从0开始。

    3、在numpy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank).

    4、从ndarray对象提取任何元素(通过切片)由一个数组标量类型的python对象表示,数组切片得到的是原始数组的视图,所有修改都会直接反映到源数组。如果需要得到的ndarray切片的一份副本,需要进行复制操作,比如arange[5:8].copy()

    5、ndarray对象的属性

    属性 说明
    .ndim 秩,即轴的数量或维度的数量
    .shape ndarray对象的尺度,对于矩阵m行n列
    .size ndarray对象元素的个数,相当于.shape中m*n的值
    .dtype ndarray对象的元素类型
    .itemsize ndarray对象中每个元素的大小,以字节为单位

    演示

    6、ndarray类的形态操作方法

    方法 说明
    ndarray.rashape(n,m) 不改变数组ndarray,返回一个维度为(m,n)的数组
    ndarray.resize(new_shape) 与reshape()作用相同,直接修改数组ndarray
    ndarray.swapaxes(ax1,ax2) 将数组中n个维度中任意两个维度进行调换
    ndarray.flatten() 对数组进行降维,返回一个折叠后的一维数组
    ndarray,ravel() 作用同np.flatten(),但是返回数组的一个视图

    二、numpy库常用的创建数组函数

    函数 说明
    np.array([x,y,z],dtype=int) 从python列表和元组创造数组
    np.arange(x,y,i) 创建一个由x到y,以i为步长的数组
    np.linspace(x,y,n) 创建一个由x到y,等分成n个元素的数组
    np.indices((m,n)) 创建一个m行n列的矩阵
    np.random.rand(m,n) 创建一个m行n列的随机数组
    np.ones((m,n),dtype) 创建一个m行n列全1的数组,dtype是数据类型
    np.empty((m,n),dtype) 创建一个m行n列的全0的数组,dtype是数据类型

    三、numpy库的算数运算函数

    函数 说明
    np.add(x1,x2[,y]) y=x1+x2
    np.subtract(x1,x2[,y]) y=x1-x2
    np.multiply(x1,x2[,y]) y=x1*x2
    np.divide(x1,x2[,y]) y=x1/x2
    np.floor_divide(x1,x2[,y]) y=x1//x2,返回值取整
    np.negative(x[,y]) y=-x
    np.power(x1,x2[,y]) y=x1**x2
    np.remainder(x1,x2[,y]) y=x1%x2

    注意:

    这些函数中,输出参数y可选,如果没有指定,将创建并返回一个新的数组保存计算结果;如果指定参数,则将结果保存到参数中。例如,两个数组相加可以简单地写为a+b,而np.add(a,b,a)则表示a+=b

    四、numpy库的比较运算函数

    函数 说明
    np.equal(x1,x2[,y]) y=x1=x2
    np.not_equal(x1,x2[,y]) y=x1!=x2
    np.less(x1,x2,[,y]) y=x1<x2
    np.less_equal(x1,x2,[,y]) y=x1<=x2
    np.greater(x1,x2,[,y]) y=x1>x2
    np.greater_equal(x1,x2,[,y]) y=x1>=x2
    np.where(condition[x,y]) 根据给出的条件判断输出x还是y

    注意:numpy库的比较运算函数将返回一个布尔数组,它包含两个数组中对应元素的比较结果,比如

    五、numpy库的其他运算函数

    函数 说明
    np.abs(x) 计算基于元素的整型,浮点或复数的绝对值
    np.sqrt(x) 计算每个元素的平方根
    np.squre(x) 计算每个元素的平方
    np.sign(x) 计算每个元素的符号: 1(+),0,-1(-)
    np.ceil(x) 计算大于或等于每个元素的最小值
    np.floor(x) 计算小于或等于每个元素的最大值
    np.rint(x[,out]) 圆整,取每个元素为最近的整数,保留数据类型
    np.exp(x[,out]) 计算每个元素的指数值
    np.log(x),np.log10(x),np.log2(x)

    计算自然对数(e),基于10,2的对数,log(1+x)

    六、手绘

    直接上代码

     1 from PIL import Image
     2 import numpy as np
     3 a = np.asarray(Image.open("p1.jpg").convert("L")).astype("float")
     4 depth = 10  #设置深度为10
     5 grad = np.gradient(a)   #对数组a求梯度
     6 grad_x, grad_y = grad
     7 grad_x = grad_x*depth/100
     8 grad_y = grad_y*depth/100
     9 A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
    10 uni_x = grad_x/A
    11 uni_y = grad_y/A
    12 uni_z = 1./A
    13 vec_el = np.pi/2.2  #θ角度
    14 vec_az = np.pi/4.   #α角度
    15 dx = np.cos(vec_el)*np.cos(vec_az)
    16 dy = np.cos(vec_el)*np.sin(vec_az)
    17 dz = np.sin(vec_el)
    18 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)
    19 b = b.clip(0, 255)
    20 im = Image.fromarray(b.astype('uint8'))
    21 im.save("b.jpg")

    结果对比:

  • 相关阅读:
    【今日CV 视觉论文速览】 19 Nov 2018
    【numpy求和】numpy.sum()求和
    【今日CV 视觉论文速览】16 Nov 2018
    【今日CV 视觉论文速览】15 Nov 2018
    poj 2454 Jersey Politics 随机化
    poj 3318 Matrix Multiplication 随机化算法
    hdu 3400 Line belt 三分法
    poj 3301 Texas Trip 三分法
    poj 2976 Dropping tests 0/1分数规划
    poj 3440 Coin Toss 概率问题
  • 原文地址:https://www.cnblogs.com/qinlai/p/12812973.html
Copyright © 2011-2022 走看看