网络爬虫Python+numpy

numpy介绍

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

numpy安装

Microsoft Windows [版本 10.0.19043.1645]
(c) Microsoft Corporation。保留所有权利。

C:\WINDOWS\system32>pip install numpy
Requirement already satisfied: numpy in c:\users\1234\anaconda3\lib\site-packages (1.20.3)

NumPy Ndarray 对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。 ndarray 对象是用于存放同类型元素的多维数组。 ndarray 中的每个元素在内存中都有相同存储大小的区域。

创建数组对象

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

名称:        描述
object      数组或嵌套的数列
dtype       数组元素的数据类型,可选
copy        对象是否需要复制,可选
order       创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok      默认返回一个与基类类型一致的数组
ndmin     指定生成数组的最小维度

import numpy as np 
a = np.array([1,2,3])  
print (a)

定义一维数组

from numpy import *
import numpy as np
b=np.array([1,2,3])
print(b)
print(b.dtype)
print(b.shape)

定义二维数组

from numpy import *
import numpy as np
c=np.array([['a','b','c']])
print(c)
print(c.shape)

定义最小维度

from numpy import *
import numpy as np
d=np.array([1,2,3],ndmin=2)
print(d)

numpy数据类型

名称    描述
bool_    布尔型数据类型(True 或者 False)
int_     默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc     与 C 的 int 类型一样,一般是 int32 或 int 64
intp     用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8     字节(-128 to 127)
int16    整数(-32768 to 32767)
int32    整数(-2147483648 to 2147483647)
int64     整数(-9223372036854775808 to 9223372036854775807)
uint8    无符号整数(0 to 255)
uint16     无符号整数(0 to 65535)
uint32    无符号整数(0 to 4294967295)
uint64     无符号整数(0 to 18446744073709551615)
float_     float64 类型的简写
float16     半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32     单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64    双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_     complex128 类型的简写,即 128 位复数
complex64     复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128    复数,表示双 64 位浮点数(实数部分和虚数部分)

数据类型对象 (dtype)

数据类型对象(numpy.dtype 类的实例)用来描述与数组对应的内存区域是如何使用,它描述了数据的以下几个方面:
        数据的类型(整数,浮点数或者 Python 对象) 数据的大小(例如, 整数使用多少个字节存储) 数据的字节顺序(小端法或大端法) 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分 如果数据类型是子数组,那么它的形状和数据类型是什么。
         字节顺序是通过对数据类型预先设定 < 或 > 来决定的。
        < 意味着小端法(最小值存储在最小的地址,即低位组放在最前面)。>
        意味着大端法(最重要的字节存储在最小的地址,即高位组放在最前面)

指定数据类型

from numpy import *
import numpy as np
e=np.array([1,2,3],dtype=float32)
print(e)

定义数据数据类型对象

from numpy import *
import numpy as np
dt=np.dtype(np.int32)
dt=np.dtype('f4')

用户定义数组

from numpy import *
import numpy as np
a=np.array([1,2,3],dtype=dt)
print(a)

定义数据类型

from numpy import *
import numpy as np
#int8,int16,int32,int64可以使用字符串代替'i1','i2','i4','i8'
#字符串以使用字符串代替'S30'
#浮点型以使用字符串代替'f4'
#定义数据类型
st=np.dtype([('name','S30'),('age','i1'),('marks','f4')])
b=np.array([('abc',21,50),('zxc',18,81),('yyy',25,90)],dtype=st)
print(b)
print(len(b))

numpy创建数组

特殊方式创建数组

  1. 创建空数组

    from numpy import *
    import numpy as np
    n=np.empty([3,3],dtype=np.float32,order='C')
    print(n)

  2. 创建零数组

    from numpy import *
    import numpy as np
    z=np.zeros([2,2],dtype='i4',order='C')
    print(z)
  3. 创建原组数组

    from numpy import *
    import numpy as np
    x=np.zeros([2,2],dtype=[('x','i1'),('y','i4')])
    print(x)
    print(len(x))
  4. 创建一维数组

    from numpy import *
    import numpy as np
    c=np.ones([3,3],dtype='f4')
    print(c)

从已有数据创建数组

  1. 元组转数组

    from numpy import *
    import numpy as np
    t=(3,4,5)
    at=np.asarray(y)
    print(at)
  2. 将元组列表转为数组

    from numpy import *
    import numpy as np
    lt=[(1,2,3),(4,5)]
    alt=np.asarray(lt,dtype=object)
    print(alt)

从数组范围创建数组

  1. 访问创建数组

    from numpy import *
    import numpy as np
    aa=np.arange(10,20,2,dtype=float)
    print(aa))

 数组操作

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。 ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

切片与索引

  1. 通过切片获取数据

    from numpy import *
    import numpy as np
    a=np.arange(20)
    print(a)
  2. 定义切片

    from numpy import *
    import numpy as np
    a=np.arange(20)
    b=slice(3,9,2)
    print(a[b])
  3. 通过索引获取值

    from numpy import *
    import numpy as np
    a=np.arange(20)
    print(a)
  4. 按一维数组指定

    from numpy import *
    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(a[1:])
  5. 按二维数组指定

    from numpy import *
    import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(a[1:,1:])
    print(a[...,1:])
    print(a[1,1])
    print("*"*100)
    print(a[1:3,0:2])
    print(a[1:3,0:4:2])
    print(a[0:4,2:3])

数组广播=运算

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。
        如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

  1. 一维对一维

    from numpy import *
    import numpy as np
    a=np.array([1,2,3,4])
    b=np.array([10,20,30,40])
    c=a*b
    print(c)
  2. 二维对二维

    from numpy import *
    import numpy as np
    a=np.array([[0,0,0],
                [10,10,10],
                [20,20,20],
                [30,30,30]])
    b=np.array([[1,2,3]])
    bb=np.tile(b,(4,1))#重复b的各个维度
    print(bb)
    print(a+bb)
  3. 二维对一维

    from numpy import *
    import numpy as np
    a=np.array([[0,0,0],
                [10,10,10],
                [20,20,20],
                [30,30,30]])
    b=np.array([[1,2,3]])
    print(b)

数组迭代

NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。
        迭代器最基本的任务的可以完成对数组元素的访问。

  1. 变形

    from numpy import *
    import numpy as np
    a=np.arange(8)
    print(a.reshape(2,4))
  2.  迭代
    from numpy import *
    import numpy as np
    a=np.arange(9).reshape(3,3)
  3. 不迭代,遍历

    from numpy import *
    import numpy as np
    a=np.arange(8)
    for i in a:
        print(i)
  4. 迭代

    from numpy import *
    import numpy as np
    a=np.arange(8)
    for i in a.flat:
        print(i)
  5. 迭代器

    from numpy import *
    import numpy as np
    a=np.arange(8)
    for i in np.nditer(a):
        print(i)

数组操作

  1. 拷贝数据,不影响原始数据

    from numpy import *
    import numpy as np
    a=np.arange(8).reshape(2,4)
    print(a)
    print(a.flatten(order="C"))
    print("*"*100)
  2. 展平数组元素

    from numpy import *
    import numpy as np
    a=np.arange(4).reshape(2,2)
    print(a.ravel(order="C"))
    print("*"*100)
  3. 展平数组元素

    from numpy import *
    import numpy as np
    a=np.arange(8).reshape(4,2)
    print(a)
    print(np.transpose(a))
    print("*"*100,"对换数组维度")
  4. 扩展

    from numpy import *
    import numpy as np
    a=np.arange(4).reshape(1,4)
    b=np.broadcast_to(a,(4,4))
    print(b)
    print("*"*100)
  5. 连接数组

    from numpy import *
    import numpy as np
    a=np.array([[1,2],[3,4]])
    b=np.array([[1,2],[3,4]])
    print(np.concatenate((a,b),0))
    print("*"*100)
  6. 分割数组

    from numpy import *
    import numpy as np
    a=np.arange(9)
    b=np.split(a,3)
    print(b)
    print("*"*100)
  7. 添加

    from numpy import *
    import numpy as np
    a=np.array([[1,2,3],[4,5,6]])
    b=np.append(a,[7,8,9])
    print(b.reshape(3,3))
    print("*"*100)
  8. 删除

    from numpy import *
    import numpy as np
    a=np.arange(12).reshape(3,4)
    b=np.delete(a,5)
    print(b)
    b=np.delete(a,1,axis=1);
    print(b)

函数 

函数    描述
add()     对两个数组的逐个字符串元素进行连接
multiply()    返回按元素多重连接后的字符串
center()     居中字符串
capitalize()     将字符串第一个字母转换为大写
title()     将字符串的每个单词的第一个字母转换为大写
lower()     数组元素转换为小写
upper()     数组元素转换为大写
split()     指定分隔符对字符串进行分割,并返回数组列表
splitlines()     返回元素中的行列表,以换行符分割
strip()     移除元素开头或者结尾处的特定字符
join()     通过指定分隔符来连接数组中的元素
replace()     使用新字符串替换字符串中的所有子字符串
decode()     数组元素依次调用str.decode
encode()     数组元素依次调用str.encode

字符串函数

  1. 字符串链接

    from numpy import *
    import numpy as np
    print(np.char.add(["hello"],["xyz"]))
    print()
    print(np.char.add(["hello","123"],["xyz","456"]))
    print()
  2. 多重连接

    from numpy import *
    import numpy as np
    print(np.char.multiply("abc",3))
    print()
  3. 字符串居中

    from numpy import *
    import numpy as np
    #(字符串,长度,填充字符)
    print(np.char.center("by",20,fillchar="*"))
    print()
  4. 首字母大写

    from numpy import *
    import numpy as np
    print(np.char.capitalize("abc"))
    print()
  5. 每个单词首字母大写

    from numpy import *
    import numpy as np
    print(np.char.title("abc  def"))
    print()
  6. 每个元素转小写

    from numpy import *
    import numpy as np
    print(np.char.lower(['ABC','DEF']))
    print()
  7. 每个元素转大写

    from numpy import *
    import numpy as np
    print(np.char.upper(['aBC','dEF']))
    print()
  8. 指定字符进行分割,返回数组

    from numpy import *
    import numpy as np
    print(np.char.split("i like run?"))
    print(np.char.split("wwww.baidu.com",sep='.'))
    print()
    
  9. 换行符分割字符串,返回数组

    from numpy import *
    import numpy as np
    print(np.char.splitlines("i\nlike\nrun?"))
    print()
  10. 移除开头或者结尾指定字符

    from numpy import *
    import numpy as np
    print(np.char.strip("1abc1111def1","1"))
    print(np.char.strip(['aeee','awwww'],'a'))
    print()
  11. 连接插入指定字符

    from numpy import *
    import numpy as np
    print(np.char.join([":","_"],["abcd","123"]))
  12. 替换字符串所有字符串

    from numpy import *
    import numpy as np
    print(np.char.replace("i like runoob ","oo","cc"))
  13. 对字符串进行编码

    from numpy import *
    import numpy as np
    #默认编码utf-8
    a=np.char.encode("abc","cp500")
    print(a)
  14. 编码进行解码

    from numpy import *
    import numpy as np
    a=np.char.encode("abc","cp500")
    print(np.char.decode(a,"cp500"))
    print()

数学函数

  1. 返回最大整数,即向下取整

    from numpy import *
    import numpy as np
    a=np.array([-1.4,1.5,11,33])
    print(np.floor(a))
    print()
  2. 返回最小整数,即向上取整

    from numpy import *
    import numpy as np
    a=np.array([-1.4,1.5,11,33])
    print(np.floor(a))
    print()
  3. NumPy 算术函数

    from numpy import *
    import numpy as np
    a = np.arange(9, dtype = np.float_).reshape(3,3)
    print ('第一个数组:')
    print (a)
    print ('\n')
    print ('第二个数组:')
    b = np.array([10,10,10])
    print (b)
    print ('\n')
    print ('两个数组相加:')
    print (np.add(a,b))
    print ('\n')
    print ('两个数组相减:')
    print (np.subtract(a,b))
    print ('\n')
    print ('两个数组相乘:')
    print (np.multiply(a,b))
    print ('\n')
    print ('两个数组相除:')
    print (np.divide(a,b))

统计函数

  1. NumPy 统计函数

    from numpy import *
    import numpy as np
    a = np.array([[3,7,5],[8,4,3],[2,4,9]])
    print ('我们的数组是:')
    print (a)
    print ('\n')
    print ('调用 amin() 函数:')
    print (np.amin(a,1))
    print ('\n')
    print ('再次调用 amin() 函数:')
    print (np.amin(a,0))
    print ('\n')
    print ('调用 amax() 函数:')
    print (np.amax(a))
    print ('\n')
    print ('再次调用 amax() 函数:')
    print (np.amax(a, axis =  0))
  2. 函数计算数组中元素最大值与最小值的差(最大值 - 最小值)。

    from numpy import *
    import numpy as np
    a = np.array([[3,7,5],[8,4,3],[2,4,9]])
    print ('我们的数组是:')
    print (a)
    print ('\n')
    print ('调用 ptp() 函数:')
    print (np.ptp(a))
    print ('\n')
    print ('沿轴 1 调用 ptp() 函数:')
    print (np.ptp(a, axis =  1))
    print ('\n')
    print ('沿轴 0 调用 ptp() 函数:')
    print (np.ptp(a, axis =  0))
  3. 函数返回输入数组的排序副本。函数格式如下:

    from numpy import *
    import numpy as np
    a = np.array([[3,7],[9,1]])
    print ('我们的数组是:')
    print (a)
    print ('\n')
    print ('调用 sort() 函数:')
    print (np.sort(a))
    print ('\n')
    print ('按列排序:')
    print (np.sort(a, axis =  0))
    print ('\n')

排序函数

  1. 在 sort 函数中排序字段

    from numpy import *
    import numpy as np
    dt = np.dtype([('name',  'S10'),('age',  int)])
    a = np.array([("raju",21),("anil",25),("ravi",  17),  ("amar",27)], dtype = dt)
    print ('我们的数组是:')
    print (a)
    print ('\n')
    print ('按 name 排序:')
    print (np.sort(a, order =  'name'))
  2. 函数返回的是数组值从小到大的索引值。

    from numpy import *
    import numpy as np
    x = np.array([3,  1,  2])
    print ('我们的数组是:')
    print (x)
    print ('\n')
    print ('对 x 调用 argsort() 函数:')
    y = np.argsort(x)
    print (y)
    print ('\n')
    print ('以排序后的顺序重构原数组:')
    print (x[y])
    print ('\n')
    print ('使用循环重构原数组:')
    for i in y:
        print (x[i], end=" ")

你可能感兴趣的:(python)