NumPy 一维数组转二维

NumPy 数组 的形状可以通过多种方式改变。其中,将一维数组转换为二维数组是 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。

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号