Numpy:将3D Numpy数组转换为2D
在本文中,我们将介绍如何将3D Numpy数组转换为2D。可能有多个原因需要这样做,其中一个主要原因是更方便地将数据传递给机器学习算法。
阅读更多:Numpy 教程
什么是3D和2D Numpy数组?
在深入探讨如何将3D Numpy数组转换为2D之前,让我们先简要介绍一下3D和2D Numpy数组。
一个Numpy数组是一个多维数组对象,它由称为维度的轴组成。在2D Numpy数组中,有两个轴表示为行和列。
例如,以下是一个2D Numpy数组,其中每行表示一组数据,每列表示一个特征:
import numpy as np
arr = np.array([
[1,2,3],
[2,3,4],
[3,4,5]
])
print(arr)
输出结果:
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5]])
在3D Numpy数组中,我们有一个额外的轴,通常表示为深度。
例如,以下是一个3D Numpy数组,其中每个深度表示一个二维平面:
arr = np.array([
[[1,2,3],
[2,3,4],
[3,4,5]],
[[6,7,8],
[7,8,9],
[8,9,10]]
])
print(arr)
输出结果:
array([[[ 1, 2, 3],
[ 2, 3, 4],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 7, 8, 9],
[ 8, 9, 10]]])
如何将3D Numpy数组转换为2D
现在,让我们看看如何将3D Numpy数组转换为2D。
一个简单的方法是使用Numpy库中的reshape()函数。该函数允许我们重新设置数组的形状,同时保持其元素数量不变。
arr = np.array([
[[1,2,3],
[2,3,4],
[3,4,5]],
[[6,7,8],
[7,8,9],
[8,9,10]]
])
# 通过将形状更改为(6,3),我们可以将3D数组转换为2D数组
new_arr = arr.reshape(6,3)
print(new_arr)
输出结果:
array([[ 1, 2, 3],
[ 2, 3, 4],
[ 3, 4, 5],
[ 6, 7, 8],
[ 7, 8, 9],
[ 8, 9, 10]])
上面的示例中,我们将3D Numpy数组通过将其形状更改为(6,3)转换为2D数组。注意,这里的元素数仍然保持不变,但轴数由3变为2。
如果你想将3D数组按深度轴进行堆叠,成为2D数组的“宽度”,可以使用vstack()函数:
arr = np.array([
[[1,2,3],
[2,3,4],
[3,4,5]],
[[6,7,8],
[7,8,9],
[8,9,10]]
])
new_arr = np.vstack(arr)
print(new_arr)
输出结果:
array([[ 1, 2, 3],
[ 2, 3, 4],
[ 3, 4, 5],
[ 6, 7, 8],
[ 7, 8, 9],
[ 8, 9, 10]])
将2D Numpy数组转换为3D
我们已经介绍了如何将3D Numpy数组转换为2D,那么我们也可以使用相同的方法将2D Numpy数组转换为3D。
例如,以下是一个2D Numpy数组:
arr = np.array([
[1,2,3],
[2,3,4],
[3,4,5],
[6,7,8],
[7,8,9],
[8,9,10]
])
现在,我们可以通过将其形状更改为(2,3,3)来将其转换为3D Numpy数组:
new_arr = arr.reshape(2,3,3)
print(new_arr)
输出结果:
array([[[ 1, 2, 3],
[ 2, 3, 4],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 7, 8, 9],
[ 8, 9, 10]]])
在上面的示例中,我们将2D Numpy数组通过将其形状更改为(2,3,3)转换为3D数组。
总结
在本文中,我们介绍了如何将3D Numpy数组转换为2D或将2D Numpy数组转换为3D。通过使用Numpy中的reshape()和vstack()函数,我们可以很容易地转换数组的形状,使其更适合我们需要使用的数据结构和算法。
虽然在某些情况下,改变数组的形状可能需要花费一些时间和计算资源,但由于Numpy数组的优秀性能和广泛的支持,这些问题很少成为瓶颈。
极客笔记