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")

    结果对比:

  • 相关阅读:
    MVC filter
    常见的页面中两个div自适应等高CSS控制
    字符串排序 获取字符串中最长的单词
    js中“==”与“===”区别
    数组中字符串按照长度大小排序
    jquery中ajax使用
    关于ajax
    父级div宽度100%,子级一个div宽度固定,另一个宽度自适应
    window.onload与$(document).ready()区别
    盒模型
  • 原文地址:https://www.cnblogs.com/qinlai/p/12812973.html
Copyright © 2011-2022 走看看