python numpy--数组的组合和分割实例

1. numpy数组的组合

1.1 数组的堆叠

numpy数组的堆叠是指将多个数组在某一个方向合并成一个数组。numpy提供了三个函数来完成数组的堆叠操作:np.concatenate、np.vstack和np.hstack。

使用np.concatenate函数进行堆叠操作

import numpy as np

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

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

result = np.concatenate((array1, array2), axis=0)

print(result)

上述代码中,我们使用了np.concatenate函数,将array1和array2数组在第0个轴的方向堆叠起来,得到结果如下:

[[1 2]

[3 4]

[5 6]

[7 8]]

使用np.vstack函数进行垂直方向的堆叠操作

import numpy as np

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

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

result = np.vstack((array1, array2))

print(result)

上述代码中,我们使用了np.vstack函数,将array1和array2数组在垂直方向(第0个轴)堆叠起来,得到结果如下:

[[1 2]

[3 4]

[5 6]

[7 8]]

使用np.hstack函数进行水平方向的堆叠操作

import numpy as np

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

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

result = np.hstack((array1, array2))

print(result)

上述代码中,我们使用了np.hstack函数,将array1和array2数组在水平方向(第1个轴)堆叠起来,得到结果如下:

[[1 2 5 6]

[3 4 7 8]]

1.2 数组的深度堆叠

深度堆叠是指在第3个轴上的方向进行堆叠,即将多个二维数组合并成一个三维数组。numpy提供了一个函数np.dstack来实现深度堆叠。

import numpy as np

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

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

result = np.dstack((array1, array2))

print(result)

上述代码中,我们使用了np.dstack函数,将array1和array2数组在第3个轴(深度方向)堆叠起来,得到结果如下:

[[[1 5]

[2 6]]

[[3 7]

[4 8]]]

2. numpy数组的分割

2.1 数组的水平分割

numpy提供了hsplit函数和split函数来进行数组的水平分割操作。

使用hsplit函数进行水平分割操作

import numpy as np

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

result = np.hsplit(array, 2)

print(result)

上述代码中,我们使用了np.hsplit函数,将array数组在第1个轴(水平方向)上均分为两份,得到结果如下:

[array([[ 0, 1],

[ 4, 5],

[ 8, 9],

[12, 13]]),

array([[ 2, 3],

[ 6, 7],

[10, 11],

[14, 15]])]

使用split函数进行水平分割操作

import numpy as np

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

result = np.split(array, 2, axis=1)

print(result)

上述代码中,我们使用了np.split函数,将array数组在第1个轴(水平方向)上均分为两份,得到结果如下:

[array([[ 0, 1],

[ 4, 5],

[ 8, 9],

[12, 13]]),

array([[ 2, 3],

[ 6, 7],

[10, 11],

[14, 15]])]

2.2 数组的垂直分割

numpy提供了vsplit函数和split函数来进行数组的垂直分割操作。

使用vsplit函数进行垂直分割操作

import numpy as np

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

result = np.vsplit(array, 2)

print(result)

上述代码中,我们使用了np.vsplit函数,将array数组在第0个轴(垂直方向)上均分为两份,得到结果如下:

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

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

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

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

使用split函数进行垂直分割操作

import numpy as np

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

result = np.split(array, 2, axis=0)

print(result)

上述代码中,我们使用了np.split函数,将array数组在第0个轴(垂直方向)上均分为两份,得到结果如下:

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

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

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

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

2.3 数组的深度分割

深度分割是指在第3个轴上的方向进行分割,即将一个三维数组分割成多个二维数组。numpy提供了一个函数np.dsplit来实现深度分割。

import numpy as np

array = np.arange(16).reshape((2, 2, 4))

result = np.dsplit(array, 2)

print(result)

上述代码中,我们使用了np.dsplit函数,将array数组在第2个轴(深度方向)上均分为两份,得到结果如下:

[array([[[ 0, 1],

[ 4, 5]],

[[ 8, 9],

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

[ 6, 7]],

[[10, 11],

[14, 15]]])]

3. 示例应用

numpy的数组的组合和分割操作在实际应用中具有广泛的应用。例如,我们可以利用numpy的数组堆叠和分割操作在神经网络中进行数据的预处理。

假设我们有一份数据,其中每个样本有100个特征值,并且我们希望使用一批大小为32的网络对这份数据进行训练。我们可以先将数据集按照样本数进行分割,然后再将分割后的数据进行水平堆叠操作,这样就可以得到一个32*100的训练数据。

import numpy as np

data = np.random.rand(100, 100)

data_splits = np.split(data, 32, axis=0)

batch_data = np.hstack(data_splits)

print(batch_data.shape)

上述代码中,我们首先生成一个100*100的数据集,然后使用np.split函数将数据集按照样本数均分为32份。接着使用np.hstack函数对分割后的数据进行水平堆叠操作,得到一个32*100的训练数据。

得到训练数据后,我们可以开始进行神经网络的训练。

4. 总结

numpy的数组组合和分割操作对于科学计算和数据处理都有着重要的意义。在numpy中,我们可以使用np.concatenate、 np.vstack、np.hstack和np.dstack等函数来完成数组堆叠操作,使用np.split、np.hsplit和np.vsplit等函数来完成数组分割操作。在实际应用中,这些函数都可以发挥重要的作用。

后端开发标签