数组的组合与分割

Posted 风过竹影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的组合与分割相关的知识,希望对你有一定的参考价值。

import numpy as np

a1=np.arange(16).reshape(4,4)

a2=np.arange(2,34,2).reshape(4,4)

a1

Out[10]:

array([[ 0,  1,  2,  3],

       [ 4,  5,  6,  7],

       [ 8,  9, 10, 11],

       [12, 13, 14, 15]])

 

a2

Out[11]:

array([[ 2,  4,  6,  8],

       [10, 12, 14, 16],

       [18, 20, 22, 24],

       [26, 28, 30, 32]])

1.数组的水平组合

两个函数  np.hstacknp.concatenate(axis=1时)

使用条件:1.数组的维度必须相同;2.行数必须相同。

np.hstack((a1,a2))

Out[13]:

array([[ 0,  1,  2,  3,  2,  4,  6,  8],

       [ 4,  5,  6,  7, 10, 12, 14, 16],

       [ 8,  9, 10, 11, 18, 20, 22, 24],

       [12, 13, 14, 15, 26, 28, 30, 32]])

np.concatenate((a1,a2),axis=1)

Out[15]:

array([[ 0,  1,  2,  3,  2,  4,  6,  8],

       [ 4,  5,  6,  7, 10, 12, 14, 16],

       [ 8,  9, 10, 11, 18, 20, 22, 24],

       [12, 13, 14, 15, 26, 28, 30, 32]])

2.垂直组合

两个函数np.vstacknp.concatenate(axis=0时)

使用条件:

通过vstack函数进行垂直组合,各数组列数必须相同,此规律也适合一维数组。

np.vstack((a1,a2))

Out[16]:

array([[ 0,  1,  2,  3],

       [ 4,  5,  6,  7],

       [ 8,  9, 10, 11],

       [12, 13, 14, 15],

       [ 2,  4,  6,  8],

       [10, 12, 14, 16],

       [18, 20, 22, 24],

       [26, 28, 30, 32]])

 

np.concatenate((a1,a2),axis=0)

Out[17]:

array([[ 0,  1,  2,  3],

       [ 4,  5,  6,  7],

       [ 8,  9, 10, 11],

       [12, 13, 14, 15],

       [ 2,  4,  6,  8],

       [10, 12, 14, 16],

       [18, 20, 22, 24],

       [26, 28, 30, 32]])

3.沿着纵轴方向组合

使用条件:

通过dtack函数进行数组沿轴纵向对接各数组必须列数与行数均相等。

np.dstack((a1,a2))

Out[18]:

array([[[ 0,  2],

        [ 1,  4],

        [ 2,  6],

        [ 3,  8]],

 

       [[ 4, 10],

        [ 5, 12],

        [ 6, 14],

        [ 7, 16]],

 

       [[ 8, 18],

        [ 9, 20],

        [10, 22],

        [11, 24]],

 

       [[12, 26],

        [13, 28],

        [14, 30],

        [15, 32]]])

4.列组合

#通过column_stack函数对两个一维的数组进行组合,其过程其实就是先把它们各自进行转置,然后按列进行组合。

t1 = np.array([1,2,3,4])

t2 = np.array([5,6,7,8])

np.column_stack((t1,t2))
Out[41]:
array([[1, 5],
[2, 6],
[3, 7],
[4, 8]])

 

#通过column_stack函数对两个二维数组进行列向组合,我们要求两个数组行数必须相同。

 

np.column_stack((a1,a2))

Out[19]:

array([[ 0,  1,  2,  3,  2,  4,  6,  8],

       [ 4,  5,  6,  7, 10, 12, 14, 16],

       [ 8,  9, 10, 11, 18, 20, 22, 24],

       [12, 13, 14, 15, 26, 28, 30, 32]])

#通过column_stack对一个一维数组和二维数组进行列向组合,我们只需要求一维数组的长度与二维数组的行数相同.

np.column_stack((a1,t1))
Out[42]:
array([[ 0, 1, 2, 3, 1],
[ 4, 5, 6, 7, 2],
[ 8, 9, 10, 11, 3],
[12, 13, 14, 15, 4]])

5.行组合

np.row_stack((a1,a2))

Out[20]:

array([[ 0,  1,  2,  3],

       [ 4,  5,  6,  7],

       [ 8,  9, 10, 11],

       [12, 13, 14, 15],

       [ 2,  4,  6,  8],

       [10, 12, 14, 16],

       [18, 20, 22, 24],

       [26, 28, 30, 32]])

 

1.垂直分割

np.hsplit(a1,4)

Out[22]:

[array([[ 0],

        [ 4],

        [ 8],

        [12]]), array([[ 1],

        [ 5],

        [ 9],

        [13]]), array([[ 2],

        [ 6],

        [10],

        [14]]), array([[ 3],

        [ 7],

        [11],

        [15]])]

2.水平分割:

np.vsplit(a1,4)

Out[24]:

[array([[0, 1, 2, 3]]),

 array([[4, 5, 6, 7]]),

 array([[ 8,  9, 10, 11]]),

 array([[12, 13, 14, 15]])]

#水平分割不能切一维数组

#通过vspilt函数对二维数组进行分割,函数的第二位置是分割成的块数。只要数组的行数能够被分割的块数整除,我们就可以把数组分割成给定的块数

 

以上是关于数组的组合与分割的主要内容,如果未能解决你的问题,请参考以下文章

数组的组合操作

python数据分析基础之Numpy库详解

python数据分析基础之Numpy库详解

Python数组拼接分割

数据结构与算法之深入解析“数组的均值分割”的求解思路与算法示例

数据结构与算法之深入解析“分割数组的最大值”的求解思路与算法示例