美文网首页我爱编程
numpy基础:数组创建

numpy基础:数组创建

作者: 领悟悟悟 | 来源:发表于2018-02-28 14:10 被阅读0次

    参考
    NumPy v1.11手册
    数组创建例程

    简介

    一般有5个机制创建数组:
    1. 从其他Python结构(例如,列表,元组)转换
    2. numpy原生数组的创建(例如,arange、ones、zeros等)
    3. 从磁盘读取数组,无论是标准格式还是自定义格式
    4. 通过使用字符串或缓冲区从原始字节创建数组
    5. 使用特殊库函数(例如,random)

    本节不包括复制、join或以其他方式扩展或改变现有数组的方法。也不会涵盖创建对象数组或结构化数组。这两个都在它们自己的部分讲述。

    将Python array_like对象转换为Numpy数组

    通常,在Python中排列成array-like结构的数值数据可以通过使用array()函数转换为数组。最明显的例子是列表和元组。有关其使用的详细信息,请参阅array()的文档。一些对象可能支持数组协议,并允许以这种方式转换到数组。找出对象是否可以使用array()转换为一个数组numpy 数组的简单方法很简单,只要交互式试一下,看看它是否工作!(Python方式)。

    注意每个元素的长度
    >>> x = np.array([2,3,1,0])
    >>> x = np.array([2, 3, 1, 0])
    >>> x = np.array([[1,2.0],[0,0],(1+1j,3.)]) # note mix of tuple and lists,and types
    >>> x = np.array([[ 1.+0.j, 2.+0.j], [ 0.+0.j, 0.+0.j], [ 1.+1.j, 3.+0.j]])
    

    Numpy原生数组的创建

    Numpy具有从头开始创建数组的内置函数:

    zeros(shape)将创建一个用指定形状用0填充的数组。默认dtypefloat64

    >>> np.zeros((2, 3)) array([[ 0., 0., 0.], [ 0., 0., 0.]])
    

    ones(shape)将创建一个用1个值填充的数组。它在所有其他方面与zeros相同。

    arange()将创建具有定期递增值的数组。检查docstring有关可以使用的各种方法的完整信息。这里将给出几个例子:

    >>> np.arange(10)
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> np.arange(2, 10, dtype=np.float)
    array([ 2., 3., 4., 5., 6., 7., 8., 9.])
    >>> np.arange(2, 3, 0.1)
    array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])
    

    注意,关于用户应该知道的最后使用的一些细微之处,在arange docstring中描述。

    linspace()将创建具有指定数量的元素的数组,并在指定的开始值和结束值之间等间隔。例如:

    >>> np.linspace(1., 4., 6)
    array([ 1. ,  1.6,  2.2,  2.8,  3.4,  4. ])
    

    这个创建函数的优点是,可以保证元素的数量和起始点和结束点,arange()通常不会对任意的开始,停止和步长值做任何操作。

    indices()将创建一组数组(堆叠为一个更高维度的数组),每个维度一个,每个维表示该维度的变化。一个例子说明比口头描述好得多:

    >>> np.indices((3,3))
    array([[[0, 0, 0],
            [1, 1, 1],
            [2, 2, 2]],
    
           [[0, 1, 2],
            [0, 1, 2],
            [0, 1, 2]]])
    >>>np.indices((3,3)).shape
    (2, 3, 3)
    

    这对于在规则网格上评估多个维度的函数特别有用。

    从磁盘读取数组

    这可能是大数字组创建的最常见的情况。细节,当然,很大程度上取决于磁盘上的数据格式,因此本节只能给出如何处理各种格式的一般指针。

    标准二进制格式

    各种字段具有用于数组数据的标准格式。下面列出了已知的python库读取它们和返回numpy数组(可能有其他可以读取和转换为numpy数组,所以检查最后一节)

    HDF5: PyTables
    FITS: PyFITS
    

    不能直接读取但不难转换的格式的示例是像PIL(能够读取和写入许多图像格式,例如jpg,png等)的库支持的那些格式。

    常见ASCII格式

    逗号分隔值文件(CSV)被广泛使用(以及Excel等程序的导出和导入选项)。在Python中有许多方法可以读取这些文件。Python中有CSV函数,pylab中有函数(matplotlib的一部分)。

    更多的通用ascii文件可以使用io包在scipy中读取。

    自定义二进制格式

    有多种方法可以使用。如果文件具有相对简单的格式,那么可以编写一个简单的I / O库,并使用numpy fromfile()函数和.tofile()方法直接读取和写入numpy数组(注意你的字节序!如果存在读取数据的良好C或C ++库,那么可以使用各种技术打包该库,尽管这当然是更多的工作,需要显着更高级的知识来与C或C ++交互。

    使用特殊库

    有一些库可以用于为特殊目的生成数组,并且不可能枚举它们。最常见的用途是随机使用许多数组生成函数,其可以生成随机值的阵列,以及一些用于生成特殊矩阵(例如对角线)的效用函数。

    不能直接读取但不难转换的格式的示例是像PIL(能够读取和写入许多图像格式,例如jpg,png等)的库支持的那些格式。

    Ones and zeros

    函数 描述
    empty(shape [,dtype,order]) 返回给定形状和类型的新数组,而不初始化条目。
    empty_like(a [,dtype,order,subok]) 返回具有与给定数组相同的形状和类型的新数组。
    eye(N [,M,k,dtype]) 返回一个2-D数组,其中一个在对角线上,零在其他地方。
    identity(n [,dtype]) 返回身份数组。
    ones(shape [,dtype,order]) 返回给定形状和类型的新数组,用数字填充。
    ones_like(a [,dtype,order,subok]) 返回与给定数组具有相同形状和类型的数组。
    zeros(shape [,dtype,order]) 返回给定形状和类型的新数组,用零填充。
    zeros_like(a [,dtype,order,subok]) 返回具有与给定数组相同的形状和类型的零数组。
    full(shape,fill_value [,dtype,order]) 返回给定形状和类型的新数组,用fill_value填充。
    full_like(a,fill_value [,dtype,order,subok]) 返回与给定数组相同形状和类型的完整数组。

    From existing data 从现有数据

    函数 描述
    array(object[, dtype, copy, order, subok, ndmin]) 创建数组。
    asarray(a[, dtype, order]) 将输入转换为数组。
    asanyarray(a[, dtype, order]) 将输入转换为ndarray,但传递ndarray子类。
    ascontiguousarray(a [,dtype]) 返回内存中的连续数组(C order)。
    asmatrix(data [,dtype]) 将输入解释为矩阵。
    copy(a [,order]) 返回给定对象的数组副本。
    frombuffer(buffer [,dtype,count,offset]) 将缓冲区解释为1维数组。
    fromfile(file [,dtype,count,sep]) 从文本或二进制文件中的数据构造数组。
    fromfunction(function,shape,\ * \ * kwargs) 通过在每个坐标上执行函数来构造数组。
    fromiter(iterable,dtype [,count]) 从可迭代对象创建新的1维数组。
    fromstring(string [,dtype,count,sep]) 根据字符串中的原始二进制或文本数据初始化的新1-D数组。
    loadtxt(fname [,dtype,comments,delimiter,...]) 从文本文件加载数据。

    Creating record arrays (numpy.rec) 创建记录数组

    注意

    numpy.recnumpy.core.records的首选别名。

    函数 描述
    core.records.array(obj [,dtype,shape,...]) 从各种各样的对象构造一个记录数组。
    core.records.fromarrays(arrayList [,dtype,...]) 从数组的(平面)列表创建一个记录数组
    core.records.fromrecords(recList [,dtype,...]) 从文本形式的记录列表创建一个recarray
    core.records.fromstring(datastring [,dtype,...]) 从包含在中的二进制数据创建(只读)记录数组
    core.records.fromfile(fd [,dtype,shape,...]) 从二进制文件数据创建数组

    Creating character arrays (numpy.char) 创建字符数组

    注意

    numpy.charnumpy.core.defchararray的首选别名。

    函数 描述
    core.defchararray.array(obj [,itemsize,...]) 创建chararray
    core.defchararray.asarray(obj [,itemsize,...]) 将输入转换为chararray,只有在必要时才复制数据。

    Numerical ranges 数值范围

    函数 描述
    arange([start,] stop [,step,] [,dtype]) 在给定间隔内返回均匀间隔的值。
    linspace(start,stop [,num,endpoint,...]) 在指定的间隔内返回均匀间隔的数字。
    logspace(start,stop [,num,endpoint,base,...]) 返回以对数刻度均匀分布的数字。
    geomspace
    meshgrid(\ * xi,\ * \ * kwargs) 从坐标向量返回坐标矩阵。
    mgrid nd_grid实例,返回密集的多维“网格网格”。
    ogrid nd_grid实例,返回一个打开的多维“meshgrid”。

    Building matrices 建立矩阵

    函数 描述
    diag(v [,k]) 提取对角线或构造对角数组。
    diagflat(v [,k]) 创建一个二维数组,将扁平输入作为对角线。
    tri(N [,M,k,dtype]) 数组,其中一个在给定的对角线和在其他地方零。
    tril(m [,k]) 数组的下三角形。
    triu(m [,k]) 数组的上三角形。
    vander(x [,N,increasing]) 生成Vandermonde矩阵。

    The Matrix class

    函数 描述
    mat(data [,dtype]) 将输入解释为矩阵。
    bmat(obj [,ldict,gdict]) 从字符串,嵌套序列或数组构建一个矩阵对象。

    相关文章

      网友评论

        本文标题:numpy基础:数组创建

        本文链接:https://www.haomeiwen.com/subject/gpkbxftx.html