NumPy 数组 的形状可以通过多种方式改变。其中,将一维数组转换为二维数组是 NumPy 数组操作中常见的需求。
NumPy 提供了多种将一维数组转换为二维数组的方式,常用的如下表所示。
| 方式 | 说明 |
|---|---|
| numpy.reshape() | 改变数组的形状 |
| ndarray.reshape() | 改变数组的形状 |
| numpy.newaxis | 使用 numpy.newaxis 增加维度 |
numpy.reshape()
在 NumPy 中,我们可以使用 numpy.reshape() 函数来改变数组的形状,从而将一维数组转换为二维数组。
语法:
numpy.reshape(arr, newshape)说明:
numpy.reshape() 函数接收以下 2 个参数。
arr:需要改变形状的数组。newshape:新的形状,是一个元组,比如(行数, 列数)。
示例 1:numpy.reshape() 改变维度
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5, 6]) # 创建一个一维数组
arr2 = np.reshape(arr1, (2, 3)) # 将一维数组转换为 2x3 的二维数组
print(arr1)
print(arr2)运行结果如下。
[1 2 3 4 5 6]
[[1 2 3]
[4 5 6]]分析:
numpy.reshape(arr1, (2, 3)) 表示将一维数组 arr1 转换为了一个 2 行 3 列的二维数组 arr2。
ndarray.reshape()
在 NumPy 中,我们还可以使用 ndarray.reshape() 方法来改变数组的形状,从而将一维数组转换为二维数组。
注意,这里的 reshape() 是数组对象(ndarray 对象)的一个方法。
语法:
ndarray.reshape(newshape)说明:
参数 newshape 用于指定新的形状,是一个元组,比如 (行数, 列数)。
提示: ndarray.reshape() 是一个方法,它是 ndarray 对象的方法。而 numpy.reshape() 是一个函数,它是 numpy 包的一个函数。注意,方法和函数是不一样的。
示例 2:ndarray.reshape() 改变维度
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5, 6]) # 创建一个一维数组
arr2 = arr1.reshape((2, 3)) # 将一维数组转换为 2x3 的二维数组
print(arr1)
print(arr2)运行结果如下。
[1 2 3 4 5 6]
[[1 2 3]
[4 5 6]]分析:
arr1.reshape((2, 3)) 表示将一维数组 arr1 转换为了一个 2 行 3 列的二维数组 arr2,效果与 numpy.reshape(arr1, (2, 3)) 相同。
示例 3:使用 -1 自动推断维度
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5, 6])
# 已知想要 2 列,行数让 NumPy 自动推断
arr2 = arr1.reshape((-1, 2))
# 已知想要 1 列,行数让 NumPy 自动推断(机器学习中极高频操作)
arr3 = arr1.reshape((-1, 1))
print('原数组:')
print(arr1)
print('转换后的 2 列数组:')
print(arr2)
print('转换后的 1 列数组:')
print(arr3)运行结果如下。
原数组:
[1 2 3 4 5 6]
转换后的 2 列数组:
[[1 2]
[3 4]
[5 6]]
转换后的 1 列数组:
[[1]
[2]
[3]
[4]
[5]
[6]]分析:
在 arr1.reshape((-1, 2)) 中,-1 表示 “未知”。因为 arr1 共有 6 个元素,我们明确指定了要 2 列,所以 NumPy 会自动计算出行数为:6 ÷ 2 = 3 行。
同理,arr1.reshape((-1, 1)) 是数据科学中极其经典且高频的操作。它的作用是:不管原数组有多少个元素,都直接将其转换为 “1 列” 的二维数组(即列向量)。因此不管原数组有 100 个还是 10000 个元素,都可以用这一句代码轻松搞定!
numpy.newaxis
在 NumPy 中,我们还可以使用 numpy.newaxis 来增加数组的维度,从而将一维数组转换为二维数组。
示例 4:numpy.newaxis 增加维度
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5, 6]) # 创建一个一维数组
arr2 = arr1[:, np.newaxis] # 将一维数组转换为二维数组
print(arr1)
print(arr2)运行结果如下。
[1 2 3 4 5 6]
[[1]
[2]
[3]
[4]
[5]
[6]]分析:
arr1[:, np.newaxis] 表示在列的位置增加一个维度,从而将一维数组 arr1 转换为二维数组 arr2。
