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等函数来完成数组分割操作。在实际应用中,这些函数都可以发挥重要的作用。