Advertisement

NLP前置技术——Numpy的实现

阅读量:

Numpy包成了python科学计算的扩展包,在很多多维数组、大型数组numpy的使用时最多的。
对于numpy包的使用,最好的了解方式就是通过官网了,http://www.numpy.org/

ndarray(N-dimensional array)

1、在numpy里,ndarray他是N-demensional array英文的缩写。他是一种由同质元素组成的多维数组。元素数量是事先准备好的,同质值得是所有元素类型一致。ndarray数据类型由一个叫dtype的numpy对象指定,每个ndarray只有一种dtype类型。
数组的维数和元素数量由数组的型(shape)来确定,shape由n个正整数组成的元组来指定,元组的每个元素对应每一堆的大小,数组的堆统称为轴(axis),轴的数量叫做秩(rank)。
ndarray还有一个特定就是大小固定,创建ndarray一旦制定了大小,其大小就不会再发生改变,而python列表是可以改变的。
2、定义ndarry
使用array()函数定义,以 python列表作为参数,创建之后列表的元素就是ndarray的元素。

首先可以通过一个例子简单了解array()的用法

复制代码
    import numpy as np   #导入numpy
    a=[1,2,3,4,5,6,7,8,9]
    print(a)
    >>> [1, 2, 3, 4, 5, 6, 7, 8, 9]

对于数组a,我们希望实现将数组a中的元素扩大为原来的两倍

复制代码
    a*2 
    >>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]

但是所得的结果是将数组a复制了,不是我们想得到的结果。
其原因在于此时的数组a的类型是列表,我们无法直接相乘,必须先转换为ndarray类型。

复制代码
    # 检验数据类型
    print(type(a))
    >>> <class 'list'>
    
    #把普通python中的list转换成ndarray
    A=np.array(a)
    print(A)
    A
    >>> [1 2 3 4 5 6 7 8 9]
    array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    print(type(A))
    >>> <class 'numpy.ndarray'>
    
    A*2
    >>> array([ 2,  4,  6,  8, 10, 12, 14, 16, 18])

把类型转换后,就可以得到我们想要的结果。

ndarray的基本属性

属性 描述
ndarray.ndim 查看数组的维数
ndarray.shape 查看数组有几行几列
ndarray.size 查看数组中元素个数
ndarray.itemsize 查看每个元素所占字节大小
ndarray.dtype 查看数组元素中数据类型
ndarray.data 实际数组元素的缓冲区地址
ndarray.flat 数组元素迭代器

创建多维数组

复制代码
    #直接创建一维数组
    b=np.array([1,2,3,4])
    print(b)
    print(type(b))
    >>>[1 2 3 4]
    <class 'numpy.ndarray'>
    
    #创建n维数组
    c = np.array([[1,2,3],[4,5,6]])
    print(c)
    print(type(c))
    >>>  [[1 2 3] [4 5 6]]
    <class 'numpy.ndarray'>
    
    print(c.ndim)#有几个中括号就是几维
    >>>2
    
    print(c.shape)
    >>> (2, 3)
    
    print(c.size)
    >>> 6
    
    print(c.itemsize)
    >>> 4
    
    e = np.array([1,2,3,4,5,6],ndmin = 3)  #创建指定的多维数组
    print(e)
    >>> [[[1 2 3 4 5 6]]]
    
    f = np.array([1,2,3,4,5,6],ndmin = 3,dtype = np.complex) #创建指定维数以及数据类型的多维数组
    print(f)
    >>> [[[1.+0.j 2.+0.j 3.+0.j 4.+0.j 5.+0.j 6.+0.j]]]

可以通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。

复制代码
    g = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
    print(g)
    >>> 
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
     
    print(g.shape)
    >>>
    (4, 3)
    
    g.shape = 3,4 
    print(g)
    >>>
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]

注意:以上从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的位置是没有改变的。

复制代码
    g.shape = 2,-1
    print(g)
    >>>
    [[ 1  2  3  4  5  6]
     [ 7  8  9 10 11 12]]

以上,当某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度

复制代码
    h = g.reshape(6,2)
    print(h)
    >>>
    [[ 1  2]
     [ 3  4]
     [ 5  6]
     [ 7  8]
     [ 9 10]
     [11 12]]

以上,创建一个改变尺寸的新数组,原数组的shape保持不变。

数组的创建

操作 描述
numpy.empty() 随机创建空数组
nump.zeros() 返回指定大小的数组,并且以0作为填充
nump.zeros_like() 返回类型相同的以0作为填充的数组
nump.eye() 创建对角线为1其余为0的数组
nump.arange(i,j,k) 创建从i开始,j结束步长为k的一维数组,不包括终止值
nump.linspace(i,j,k) 创建一个i为起始值,j为终止值,元素个数为k的数组,包括终止值

全部评论 (0)

还没有任何评论哟~