数组的组合与分割
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.hstack 和np.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.vstack和np.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函数对二维数组进行分割,函数的第二位置是分割成的块数。只要数组的行数能够被分割的块数整除,我们就可以把数组分割成给定的块数
以上是关于数组的组合与分割的主要内容,如果未能解决你的问题,请参考以下文章