7数组操作
数组处理程序
主要对数组本身的进行更改。并不是进行运算。
复制数组
| 方法 | 描述 |
|---|---|
| copyto(dst, src[, casting, where]) | 将值从一个数组复制到另一个数组,并根据需要进行广播。 |
改变形状
| 方法 | 描述 |
|---|---|
| reshape(a, newshape[, order]) | 在不更改数据的情况下为数组赋予新的形状。 |
| ravel(a[, order]) | 返回一个连续的扁平数组。 |
| ndarray.flat | 数组上的一维迭代器。 |
| ndarray.flatten([order]) | 返回折叠成一维的数组副本。 |
转置数组
| 方法 | 描述 |
|---|---|
| moveaxis(a, source, destination) | 将数组的轴移到新位置。 |
| rollaxis(a, axis[, start]) | 向后滚动指定的轴,直到其位于给定的位置。 |
| swapaxes(a, axis1, axis2) | 互换数组的两个轴。 |
| ndarray.T | 转置数组。 |
| transpose(a[, axes]) | 排列数组的尺寸。 |
更改维度数
| 方法 | 描述 |
|---|---|
| atleast_1d(*arys) | 将输入转换为至少一维的数组。 |
| atleast_2d(*arys) | 将输入视为至少具有二维的数组。 |
| atleast_3d(*arys) | 以至少三个维度的数组形式查看输入。 |
| broadcast | 产生模仿广播的对象。 |
| broadcast_to(array, shape[, subok]) | 将数组广播为新形状。 |
| broadcast_arrays(*args, **kwargs) | 互相广播任意数量的阵列。 |
| expand_dims(a, axis) | 扩展数组的形状。 |
| squeeze(a[, axis]) | 从数组形状中删除一维条目。 |
改变种类
| 方法 | 描述 |
|---|---|
| asarray(a[, dtype, order]) | 将输入转换为数组。 |
| asanyarray(a[, dtype, order]) | 将输入转换为ndarray,但通过ndarray子类。 |
| asmatrix(data[, dtype]) | 将输入解释为矩阵。 |
| asfarray(a[, dtype]) | 返回转换为浮点类型的数组。 |
| asfortranarray(a[, dtype]) | 返回以Fortran顺序排列在内存中的数组(ndim> = 1)。 |
| ascontiguousarray(a[, dtype]) | 返回内存中的连续数组(ndim> = 1)(C顺序)。 |
| asarray_chkfinite(a[, dtype, order]) | 将输入转换为数组,检查NaN或Infs。 |
| asscalar(a) | 将大小为1的数组转换为其等效的标量。 |
| require(a[, dtype, requirements]) | 返回提供的类型满足要求的ndarray。 |
组合数组
| 方法 | 描述 |
|---|---|
| concatenate((a1, a2, …) | 沿现有轴连接一系列数组。 |
| stack(arrays[, axis, out]) | 沿新轴连接一系列数组。 |
| column_stack(tup) | 将一维数组作为列堆叠到二维数组中。 |
| dstack(tup) | 沿深度方向(沿第三轴)按顺序堆叠数组。 |
| hstack(tup) | 水平(按列)顺序堆叠数组。 |
| vstack(tup) | 垂直(行)按顺序堆叠数组。 |
| block(arrays) | 从块的嵌套列表中组装一个nd数组。 |
拆分数组
| 方法 | 描述 |
|---|---|
| split(ary, indices_or_sections[, axis]) | 将数组拆分为多个子数组,作为ary的视图。 |
| array_split(ary, indices_or_sections[, axis]) | 将一个数组拆分为多个子数组。 |
| dsplit(ary, indices_or_sections) | 沿第3轴(深度)将数组拆分为多个子数组。 |
| hsplit(ary, indices_or_sections) | 水平(按列)将一个数组拆分为多个子数组。 |
| vsplit(ary, indices_or_sections) | 垂直(行)将数组拆分为多个子数组。 |
平铺数组
| 方法 | 描述 |
|---|---|
| tile(A, reps) | 通过重复A代表次数来构造一个数组。 |
| repeat(a, repeats[, axis]) | 重复数组的元素。 |
添加和删除元素
| 方法 | 描述 |
|---|---|
| delete(arr, obj[, axis]) | 返回一个新的数组,该数组具有沿删除的轴的子数组。 |
| insert(arr, obj, values[, axis]) | 沿给定轴在给定索引之前插入值。 |
| append(arr, values[, axis]) | 将值附加到数组的末尾。 |
| resize(a, new_shape) | 返回具有指定形状的新数组。 |
| trim_zeross(filt[, trim]) | 修剪一维数组或序列中的前导和/或尾随零。 |
| unique(ar[, return_index, return_inverse, …]) | 查找数组的唯一元素。 |
重新排列元素
| 方法 | 描述 |
|---|---|
| flip(m[, axis]) | 沿给定轴颠倒数组中元素的顺序。 |
| fliplr(m) | 左右翻转数组。 |
| flipud(m) | 上下翻转阵列。 |
| reshape(a, newshape[, order]) | 在不更改数据的情况下为数组赋予新的形状。 |
| roll(a, shift[, axis]) | 沿给定轴滚动数组元素。 |
| rot90(m[, k, axes]) | 在轴指定的平面中将阵列旋转90度。 |
数组拼接(博客)
| concatenate | 提供了axis参数,用于指定拼接方向 |
|---|---|
| append | 默认先ravel再拼接成一维数组,也可指定axis |
| stack | 提供了axis参数,用于生成新的维度 |
| hstack | 水平拼接,沿着行的方向,对列进行拼接 |
| vstack | 垂直拼接,沿着列的方向,对行进行拼接 |
| dstack | 沿着第三个轴(深度方向)进行拼接 |
| column_stack | 水平拼接,沿着行的方向,对列进行拼接 |
| row_stack | 垂直拼接,沿着列的方向,对行进行拼接 |
| r_ | 垂直拼接,沿着列的方向,对行进行拼接 |
| c_ | 水平拼接,沿着行的方向,对列进行拼接 |
0. 维度和轴
在正确理解Numpy中的数组拼接、合并操作之前,有必要认识下维度和轴的概念:
ndarray(多维数组)是Numpy处理的数据类型。多维数组的维度即为对应数据所在的空间维度,1维可以理解为直线空间,2维可以理解为平面空间,3维可以理解为立方体空间。

轴是用来对多维数组所在空间进行定义、描述的一组正交化的直线,根据数学惯例可以用i,j,ki, j ,ki,j,k来表示。
- 在一维空间中,用一个轴就可以表示清楚,numpy中规定为axis 0,空间内的数可以理解为直线空间上的离散点 (x iii, )。
- 在二维空间中,需要用两个轴表示,numpy中规定为axis 0和axis 1,空间内的数可以理解为平面空间上的离散点(x iii,y jjj)。
- 在三维空间中,需要用三个轴才能表示清楚,在二维空间的基础上numpy中又增加了axis 2,空间内的数可以理解为立方体空间上的离散点(x iii,y jjj,z kkk)。
Python中可以用numpy中的ndim和shape来分别查看维度,以及在对应维度上的长度。直观上可以根据符号“[ ]”的层数来判断,有m层即为m维,最外面1层对应axis0, 依次为axis1,axis2…
1 | a = np.array([1,2,3]) |
1. np.concatenate()
1 | concatenate(a_tuple, axis=0, out=None) |
示例
1 | >>> import numpy as np |
2. np.append()
1 | append(arr, values, axis=None) |
示例
1 | np.append(ar1, ar2) # 先ravel扁平化再拼接,所以返回值为一个1维数组 |
3. np.stack()
1 | stack(arrays, axis=0, out=None) |
示例
1 | >>> np.stack((ar1, ar2)) # 增加第一个维度(axis0,之后的axis向后顺延:0—>1, 1—>2) |
关于维度增加的一种理解方式

4. hstack、vstack和vstack
1 | np.hstack((ar1,ar2)) # 水平拼接,沿着行的方向,对列进行拼接 |
5. column_stack和row_stack
1 | np.column_stack((ar1,ar2)) # 水平拼接,沿着行的方向,对列进行拼接 |
6. np.r_ 和np.c_
常用于快速生成ndarray数据
1 | >>> np.r_[ar1,ar2] # 垂直拼接,沿着列的方向,对行进行拼接 |
7. 总结
对于两个shape一样的二维array来说:
增加行(对行进行拼接)的方法有:
1 | np.concatenate((ar1, ar2),axis=0) |
增加列(对列进行拼接)的方法有:
1 | np.concatenate((ar1, ar2),axis=1) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!










