当前位置 : 主页 > 编程语言 > java >

numpy中数组操作的相关函数

来源:互联网 收集:自由互联 发布时间:2022-06-23
在numpy中,有一系列对数组进行操作的函数,在使用这些函数之前,必须先了解以下两个基本概念 副本 视图 副本是一个数组的完整拷贝,就是说,先对原始数据进行拷贝,生成一个新

在numpy中,有一系列对数组进行操作的函数,在使用这些函数之前,必须先了解以下两个基本概念

  • 副本
  • 视图
  • 副本是一个数组的完整拷贝,就是说,先对原始数据进行拷贝,生成一个新的数组,新的数组和原始数组是独立的,对副本的操作并不会影响到原始数组;视图是一个数组的引用,对引用进行操作,也就是对原始数据进行操作,所以修改视图会对应的修改原始数组。

    在使用函数和方法时,我们首先要明确其操作的是原始数组的副本还是视图,然后根据需要来做选择。一个基本的例子如下


    >>> import numpy as np
    >>> a = np.arange(12)
    >>> a
    array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
    >>> a.reshape(3,4)
    array([[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]])
    >>> a
    array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
    >>>
    >>> a.resize(3,4)
    >>> a
    array([[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]])


    reshape和resize方法都可以改变数组的形状,其中reshape操作的是副本,操作之后,原始数组的形状并没有改变,resize操作的是视图, 操作之后原始数组的形状发生了变化。

    常用的是数组操作有以下几种

    1. 改变数组维度和形状

    一开始已经介绍了reshape和resize方法,可以修改数组的维度和形状,除此之外,ravel和flatten则可以将多维数组转换为一维数组,用法如下


    >>> a = np.arange(12).reshape(3, 4)
    >>> a
    array([[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]])
    >>> a.ravel(order = 'C')
    array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
    >>> a.ravel(order = 'F')
    array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])
    >>> a.flatten(order = 'C')
    array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
    >>> a.flatten(order = 'F')
    array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])


    2. 数组的转置

    数组转置是最高频的操作,在numpy中,有以下几种实现方式


    >>> a
    array([[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]])

    >>> a.T
    array([[ 0, 4, 8],
    [ 1, 5, 9],
    [ 2, 6, 10],
    [ 3, 7, 11]])

    >>> a.transpose()
    array([[ 0, 4, 8],
    [ 1, 5, 9],
    [ 2, 6, 10],
    [ 3, 7, 11]])

    >>> a.swapaxes(0, 1)
    array([[ 0, 4, 8],
    [ 1, 5, 9],
    [ 2, 6, 10],
    [ 3, 7, 11]])

    >>> np.rollaxis(a, 1, 0)
    array([[ 0, 4, 8],
    [ 1, 5, 9],
    [ 2, 6, 10],
    [ 3, 7, 11]])


    3. 数组的连接

    将多个维度相同的数组连接为一个数组,实现方式有以下几种


    >>> a = np.arange(9).reshape(3,3)
    >>> a
    array([[0, 1, 2],
    [3, 4, 5],
    [6, 7, 8]])
    >>> b = np.arange(3)
    >>> b
    array([0, 1, 2])
    # 以行进行合并
    >>> np.concatenate((a, b.reshape(1, -1)), axis = 0)
    array([[0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [0, 1, 2]])

    >>> np.append(a, b.reshape(1,-1), axis = 0)
    array([[0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [0, 1, 2]])
    >>> np.vstack((a,b.reshape(1,-1)))
    array([[0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [0, 1, 2]])
    # 以列进行合并
    >>> np.concatenate((a, b.reshape(-1, 1)), axis = 1)
    array([[0, 1, 2, 0],
    [3, 4, 5, 1],
    [6, 7, 8, 2]])
    >>> np.append(a, b.reshape(-1,1), axis = 1)
    array([[0, 1, 2, 0],
    [3, 4, 5, 1],
    [6, 7, 8, 2]])
    >>> np.hstack((a,b.reshape(-1,1)))
    array([[0, 1, 2, 0],
    [3, 4, 5, 1],
    [6, 7, 8, 2]])


    数组的连接要求输入的数组必须为相同维度,而且在对应的轴上尺寸相同,特别需要注意,即使只是在二维数组的基础上增加1行或者1列,也要将添加项调整为二维数组。

    4. 数组元素的增加和删除

    这里的增加和删除指的是在指定轴的索引上进行操作,用法如下


    >>> a = np.arange(9).reshape(3,3)
    >>> a
    array([[0, 1, 2],
    [3, 4, 5],
    [6, 7, 8]])
    >>> b = np.arange(3)
    >>> b
    array([0, 1, 2])
    # 在第二行插入新数组
    >>> np.insert(a, 1, b, axis=0)
    array([[0, 1, 2],
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8]])
    # 在第二列插入新数组
    >>> np.insert(a, 1, b, axis=1)
    array([[0, 0, 1, 2],
    [3, 1, 4, 5],
    [6, 2, 7, 8]])
    # 删除第二行
    >>> np.delete(a, 1, axis = 0)
    array([[0, 1, 2],
    [6, 7, 8]])
    # 删除第二列
    >>> np.delete(a, 1, axis = 1)
    array([[0, 2],
    [3, 5],
    [6, 8]])

    5. 集合操作

    >>> a = np.array([0, 1, 2, 3])
    >>> b = np.array([2, 3, 4, 5])
    # 取交集
    >>> np.intersect1d(a, b)
    array([2, 3])
    # 取a中的差集
    >>> np.setdiff1d(a, b)
    array([0, 1])
    # 取b中的差集
    >>> np.setdiff1d(b, a)
    array([4, 5])
    # 取a和b中差集的合集
    >>> np.setxor1d(a, b)
    array([0, 1, 4, 5])
    # 取a和b的合集
    >>> np.union1d(a, b)
    array([0, 1, 2, 3, 4, 5])

     6. 数组的排序,去重

    # 获取唯一的元素
    >>> a = np.array([1, 1, 1, 2, 2, 3, 3, 3, 3])
    >>> np.unique(a)
    array([1, 2, 3])
    # 获取每个元素出现的次数
    >>> np.unique(a, return_counts=True)
    (array([1, 2, 3]), array([3, 2, 4]))
    >>> a1, a2 = np.unique(a, return_counts=True)
    >>> for x,y in zip(a1, a2):
    ... print(x,y)
    ...
    1 3
    2 2
    3 4
    # 排序数组
    >>> a = np.array([0, 2, 1, 4, 3, 7, 5])
    >>> np.sort(a)
    array([0, 1, 2, 3, 4, 5, 7])
    >>> a.sort()
    >>> a
    array([0, 1, 2, 3, 4, 5, 7])


    在numpy中,实现同一任务的方式有很多种,牢记每个函数的用法是很难的,只需要挑选几个常用函数数量掌握即可。


    ·end·


    numpy中数组操作的相关函数_数组

    一个只分享干货的

    生信公众号


    上一篇:Broadcast: Numpy中的广播机制
    下一篇:没有了
    网友评论