NumPy 教程:数组操作
发布时间:2023-03-21 14:27:19 所属栏目:教程 来源:
导读:Numpy 中包含了一些函数用于处理数组,大概可分为以下几类:
修改数组形状
翻转数组
修改数组维度
连接数组
分割数组
数组元素的添加与删除
修改数组形状
reshape 不改变数据的条件下修改形状
修改数组形状
翻转数组
修改数组维度
连接数组
分割数组
数组元素的添加与删除
修改数组形状
reshape 不改变数据的条件下修改形状
|
Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 ravel 返回展开数组 numpy.reshape 函数 可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr,newshape,order='C') 参数说明: arr:要修改形状的数组 newshape:整数或者整数数组,新的形状应当兼容原有形状 order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序 示例: In [1]: import numpy as np In [2]: sum = np.arange(8) In [3]: sum Out[3]: array([0,1,2,3,4,5,6,7]) In [4]: sum.reshape(4,2) Out[4]: array([[0,1],[2,3],[4,5],[6,7]]) numpy.ndarray.flat 函数 是一个数组元素迭代器 In [1]: import numpy as np In [2]: sum = np.arange(9).reshape(3,3) In [3]: for row in sum: ...: print(row) ...: [0 1 2] [3 4 5] [6 7 8] In [4]: for element in sum.flat: ...: print(element) ...: numpy.ndarray.flatten 函数 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组,格式如下: ndarray.flatten(order='C') 参数说明: order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘K’ – 元素在内存中的出现顺序 示例: In [1]: import numpy as np In [2]: sum = np.arange(8).reshape(2,4) In [3]: sum Out[3]: array([[0,7]]) In [4]: sum.flatten() Out[4]: array([0,7]) In [5]: sum.flatten(order='F') Out[5]: array([0,7]) numpy.ravel 函数 展平的数组元素,顺序通常是"C风格",返回的是数组视图(view,有点类似 C/C++引用reference的意味),修改会影响原始数组 numpy.ravel(num,order='C') 参数说明: order:‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘K’ – 元素在内存中的出现顺序 示例: In [1]: import numpy as np In [2]: num = np.arange(8).reshape(2,4) In [3]: num Out[3]: array([[0,7]]) In [4]: num.ravel() Out[4]: array([0,7]) In [5]: num.ravel(order='F') Out[5]: array([0,7]) 翻转数组 transpose 对换数组的维度 ndarray.T 和 self.transpose() 相同 rollaxis 向后滚动指定的轴 swapaxes 对换数组的两个轴 numpy.transpose 函数 用于对换数组的维度,格式如下: numpy.transpose(arr,axes) arr:要操作的数组 axes:整数列表,对应维度,通常所有维度都会对换 示例: In [1]: import numpy as np In [2]: num = np.arange(12).reshape(3,4) In [3]: num Out[3]: array([[ 0,[ 4,7],[ 8,9,10,11]]) In [4]: np.transpose(num) Out[4]: array([[ 0,8],[ 1,9],[ 2,10],[ 3,7,11]]) numpy.ndarray.T 类似 numpy.transpose In [5]: num.T Out[5]: array([[ 0,11]]) numpy.rollaxis 函数 向后滚动特定的轴到一个特定位置,格式如下: numpy.rollaxis(arr,axis,start) 参数说明: arr:数组 axis:要向后滚动的轴,其它轴的相对位置不会改变 start:默认为零,表示完整的滚动。会滚动到特定位置 示例: In [1]: import numpy as np In [2]: num = np.arange(8).reshape(2,2) In [3]: num Out[3]: array([[[0,3]],[[4,7]]]) In [4]: np.rollaxis(num,2) Out[4]: array([[[0,2],6]],[[1,[5,7]]]) In [5]: np.rollaxis(num,1) Out[5]: array([[[0,[1,6],7]]]) numpy.swapaxes 函数 用于交换数组的两个轴,格式如下: numpy.swapaxes(arr,axis1,axis2) 参数说明: arr:输入的数组 axis1:对应第一个轴的整数 axis2:对应第二个轴的整数 示例: In [1]: import numpy as np In [2]: num = np.arange(8).reshape(2,7]]]) In [4]: np.swapaxes(num,0) Out[4]: array([[[0,4],[3,7]]]) 修改数组维度 broadcast 产生模仿广播的对象 broadcast_to 将数组广播到新形状 expand_dims 扩展数组的形状 squeeze 从数组的形状中删除一维条目 numpy.broadcast 函数 用于模仿广播的对象,它返回一个对象,该对象封装了将一个数组广播到另一个数组的结果,该函数使用两个数组作为输入参数,如下实例: In [1]: import numpy as np In [2]: x = np.array([[1],[2],[3]]) In [3]: y = np.array([4,6]) In [4]: x Out[4]: array([[1],[3]]) In [5]: y Out[5]: array([4,6]) In [6]: num = np.broadcast(x,y) In [7]: num Out[7]: <numpy.broadcast at 0x7fac788ebce0> In [8]: a,b = num.iters In [9]: a Out[9]: <numpy.flatiter at 0x7fac779ede00> In [10]: b Out[10]: <numpy.flatiter at 0x7fac779c9e00> In [11]: print(next(a),next(b)) 1 4 In [12]: print(next(a),next(b)) 1 5 In [13]: num.shape Out[13]: (3,3) In [14]: num = np.broadcast(x,y) In [15]: ape = np.empty(num.shape) In [16]: ape Out[16]: array([[0.,0.,0.],[0.,0.]]) In [17]: ape.shape Out[17]: (3,3) In [18]: ape.flat = [i + j for i,j in num] In [19]: ape Out[19]: array([[5.,6.,7.],[6.,7.,8.],[7.,8.,9.]]) In [20]: x + y Out[20]: array([[5,[7,8,9]]) numpy.broadcast_to 函数 将数组广播到新形状,它在原始数组上返回只读视图,它通常不连续。 如果新形状不符合 NumPy 的广播规则,该函数可能会抛出 ValueError numpy.broadcast_to(array,shape,subok) 示例: In [1]: import numpy as np In [2]: num = np.arange(4).reshape(1,4) In [3]: num Out[3]: array([[0,3]]) In [4]: np.broadcast_to(num,(4,4)) Out[4]: array([[0, [0,3]]) numpy.expand_dims 函数 通过在指定位置插入新的轴来扩展数组形状,函数格式如下: numpy.expand_dims(arr,axis) 参数说明: arr:输入数组 axis:新轴插入的位置 示例: In [1]: import numpy as np In [2]: x = np.array(([1,4])) In [3]: x Out[3]: array([[1,4]]) In [4]: y = np.expand_dims(x,axis=0) In [5]: y Out[5]: array([[[1,4]]]) In [6]: x.shape,y.shape Out[6]: ((2,2),(1,2)) In [7]: y = np.expand_dims(x,axis=1) In [8]: y Out[8]: array([[[1,2]],[[3,4]]]) In [9]: x.ndim,y.ndim Out[9]: (2,3) In [10]: x.shape,y.shape Out[10]: ((2,(2,2)) numpy.squeeze 函数 从给定数组的形状中删除一维的条目,函数格式如下: numpy.squeeze(arr,axis) 参数说明: arr:输入数组 axis:整数或整数元组,用于选择形状中一维条目的子集 示例: In [1]: import numpy as np In [2]: x = np.arange(9).reshape(1,3) In [3]: x Out[3]: array([[[0,8]]]) In [4]: y = np.squeeze(x) In [5]: y Out[5]: array([[0,8]]) In [6]: x.shape,y.shape Out[6]: ((1,3),(3,3)) 连接数组 concatenate 连接沿现有轴的数组序列 stack 沿着新的轴加入一系列数组 hstack 水平堆叠序列中的数组(列方向) vstack 竖直堆叠序列中的数组(行方向) numpy.concatenate 函数 用于沿指定轴连接相同形状的两个或多个数组,格式如下: numpy.concatenate((a1,a2,...),axis) 参数说明: a1,…:相同类型的数组 axis:沿着它连接数组的轴,默认为 0 示例: In [1]: import numpy as np In [2]: x = np.array([[1,4]]) In [3]: x Out[3]: array([[1,4]]) In [4]: y = np.array([[5,8]]) In [5]: y Out[5]: array([[5,8]]) In [6]: np.concatenate((x,y)) Out[6]: array([[1,8]]) In [7]: np.concatenate((x,y),axis=0) Out[7]: array([[1,8]]) In [8]: np.concatenate((x,axis=1) Out[8]: array([[1,8]]) numpy.stack 函数 用于沿新轴连接数组序列,格式如下: numpy.stack(arrays,axis) 参数说明: arrays相同形状的数组序列 axis:返回数组中的轴,输入数组沿着它来堆叠 示例: In [1]: import numpy as np In [2]: x = np.array([[1,8]]) In [6]: np.stack((x,0) Out[6]: array([[[1,4]],[[5,8]]]) In [7]: np.stack((x,1) Out[7]: array([[[1,8]]]) numpy.hstack 函数 numpy.hstack 函数是 numpy.stack 函数的变体,它通过水平堆叠来生成数组 In [1]: import numpy as np In [2]: x = np.array([[1,8]]) In [6]: np.hstack((x,8]]) numpy.vstack 函数 numpy.vstack 函数是 numpy.stack 函数的变体,它通过垂直堆叠来生成数组 In [1]: import numpy as np In [2]: x = np.array([[1,8]]) In [6]: np.vstack((x,8]]) 分割数组 split 将一个数组分割为多个子数组 hsplit 将一个数组水平分割为多个子数组(按列) vsplit 将一个数组垂直分割为多个子数组(按行) numpy.split 函数 沿特定的轴将数组分割为子数组,格式如下: numpy.split(ary,indices_or_sections,axis) 参数说明: ary:被分割的数组 indices_or_sections:果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭) axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分 示例: In [1]: import numpy as np In [2]: num = np.arange(9) In [3]: num Out[3]: array([0,8]) In [4]: np.split(num,3) Out[4]: [array([0,2]),array([3,5]),array([6,8])] In [5]: np.split(num,7]) Out[5]: [array([0,3]),array([4,6]),array([7,8])] numpy.hsplit 函数 用于水平分割数组,通过指定要返回的相同形状的数组数量来拆分原数组 In [1]: import numpy as np In [2]: num = np.floor(10 * np.random.random((2,6))) In [3]: num Out[3]: array([[8.,1.,2.],[3.,9.,5.,3.,5.]]) In [4]: np.hsplit(num,3) Out[4]: [array([[8.,9.]]),array([[6.,[5.,3.]]),array([[1.,[8.,5.]])] numpy.vsplit 函数 沿着垂直轴分割,其分割方式与 hsplit 用法相同 In [1]: import numpy as np In [2]: num = np.arange(16).reshape(4,11],[12,13,14,15]]) In [4]: np.vsplit(num,2) Out[4]: [array([[0,7]]),array([[ 8,15]])] 数组元素的添加与删除 resize 返回指定形状的新数组 append 将值添加到数组末尾 insert 沿指定轴将值插入到指定下标之前 delete 删掉某个轴的子数组,并返回删除后的新数组 unique 查找数组内的唯一元素 numpy.resize 函数 返回指定大小的新数组,如果新数组大小大于原始大小,则包含原始数组中的元素的副本 numpy.resize(arr,shape) 参数说明: arr:要修改大小的数组 shape:返回数组的新形状 示例: In [1]: import numpy as np In [2]: x = np.array([[1,6]]) In [3]: x Out[3]: array([[1,6]]) In [4]: x.shape Out[4]: (2,3) In [5]: y = np.resize(x,2)) In [6]: y Out[6]: array([[1,6]]) In [7]: y.shape Out[7]: (3,2) In [8]: y = np.resize(x,3)) In [9]: y Out[9]: array([[1,3]]) numpy.append 函数 在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中。 此外,输入数组的维度必须匹配否则将生成ValueError,append 函数返回的始终是一个一维数组 numpy.append(arr,values,axis=None) 参数说明: arr:输入数组 values:要向arr添加的值,需要和arr形状相同(除了要添加的轴) axis:默认为 None。当axis无定义时,是横向加成,返回总是为一维数组!当axis有定义的时候,分别为0和1的时候。当axis有定义的时候,分别为0和1的时候(列数要相同)。当axis为1时,数组是加在右边(行数要相同) 示例: In [1]: import numpy as np In [2]: num = np.array([[1,6]]) In [3]: num Out[3]: array([[1,6]]) In [4]: np.append(num,9]) Out[4]: array([1,9]) In [5]: np.append(num,[[7,9]],axis=0) Out[5]: array([[1,9]]) In [6]: np.append(num,axis=1) Out[6]: array([[1,9]]) numpy.insert 函数 在给定索引之前,沿给定轴在输入数组中插入值,如果值的类型转换为要插入,则它与输入数组不同。 插入没有原地的,函数会返回一个新数组。 此外,如果未提供轴,则输入数组会被展开 numpy.insert(arr,obj,axis) arr:输入数组 obj:在其之前插入值的索引 values:要插入的值 axis:沿着它插入的轴,如果未提供,则输入数组会被展开 示例: In [1]: import numpy as np In [2]: num = np.array([[1,6]]) In [3]: num Out[3]: array([[1, [3, [5,6]]) In [4]: np.insert(num,[11,12]) Out[4]: array([ 1,11,12,6]) In [5]: np.insert(num,[11],axis=0) Out[5]: array([[ 1, [11, [ 3, [ 5,6]]) In [6]: np.insert(num,axis=1) Out[6]: array([[ 1,6]]) numpy.delete 函数 返回从输入数组中删除指定子数组的新数组。 与 insert() 函数的情况一样,如果未提供轴参数,则输入数组将展开 Numpy.delete(arr,axis) arr:输入数组 obj:可以被切片,整数或者整数数组,表明要从输入数组删除的子数组 axis:沿着它删除给定子数组的轴,如果未提供,则输入数组会被展开 示例: In [1]: import numpy as np In [2]: num = np.arange(12).reshape(3,11]]) In [4]: np.delete(num,5) Out[4]: array([ 0,11]) In [5]: np.delete(num,axis=1) Out[5]: array([[ 0,11]]) In [6]: num = np.array([1,10]) In [7]: num Out[7]: array([ 1,10]) In [8]: np.delete(num,np.s_[::2]) Out[8]: array([ 2,10]) numpy.unique 函数 用于去除数组中的重复元素 numpy.unique(arr,return_index,return_inverse,return_counts) arr:输入数组,如果不是一维数组则会展开 return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储 return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储 return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数 示例: In [1]: import numpy as np In [2]: num = np.array([5,9]) In [3]: num Out[3]: array([5,9]) In [4]: np.unique(num) Out[4]: array([2,9]) In [5]: np.unique(num,return_index=True) Out[5]: (array([2,9]),array([1,9])) In [6]: x,y = np.unique(num,return_index=True) In [7]: y Out[7]: array([1,9]) In [8]: np.unique(num,return_inverse=True) Out[8]: (array([2,5])) In [9]: x,return_inverse=True) In [10]: x Out[10]: array([2,9]) In [11]: y Out[11]: array([1,5]) In [12]: x[y] Out[12]: array([5,9]) In [13]: x,return_counts=True) In [14]: x Out[14]: array([2,9]) In [15]: y Out[15]: array([3,1]) (编辑:驾考网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
