Python 中的 numpy.reshape()

2024 年 8 月 29 日 | 4 分钟阅读

numpy.reshape() 函数在 NumPy 包中可用。顾名思义,reshape 意味着“形状改变”。 numpy.reshape() 函数帮助我们在不更改其数据的情况下为数组获取新形状。

有时,我们需要将数据从宽整形为长。因此,在这种情况下,我们必须使用 reshape() 函数重塑数组。

语法

参数

reshape() 函数有以下参数

1) arr: array_like

这是一个 ndarray。这是我们要重塑的源数组。此参数至关重要,并在 numpy.reshape() 函数中起着至关重要的作用。

2) new_shape: int 或 int 元组

我们想要转换原始数组的形状应该与原始数组兼容。如果是一个整数,结果将是一个该长度的一维数组。一个形状维度可以是-1。在这里,该值由数组的长度和剩余维度近似。

3) order: {'C', 'F', 'A'},可选

这些索引顺序参数在 reshape() 函数中起着至关重要的作用。这些索引顺序用于读取源数组的元素,并使用此索引顺序将元素放入重塑的数组中。

  1. 索引顺序“C”表示读取/写入使用类似 C 的索引顺序的元素,其中最后一个轴索引变化最快,而第一个轴索引变化最慢。
  2. 索引顺序“F”表示读取/写入使用类似 Fortran 的索引顺序的元素,其中最后一个轴索引变化最慢,而第一个轴索引变化最快。
  3. “C”和“F”顺序不考虑底层数组的内存布局,仅指索引顺序。
  4. 索引顺序“A”表示当 arr 在内存中是连续的时,以类似 Fortran 的索引顺序读取/写入元素,否则使用类似 C 的顺序。

返回值

此函数返回一个 ndarray。如果可能,它是一个新的视图对象;否则,它将是一个副本。不保证返回数组的内存布局。

示例 1:类似 C 的索引排序

输出

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
array([[ 0,  1,  2,  3],
       	[ 4,  5,  6,  7],
       	[ 8,  9, 10, 11]])

在上面的代码中

  • 我们使用别名 np 导入了 numpy。
  • 我们使用 np.arrange() 函数创建了一个数组“a”。
  • 我们声明了变量“y”并分配了 np.reshape() 函数的返回值。
  • 我们在函数中传递了数组“x”和形状。
  • 最后,我们尝试打印 arr 的值。

在输出中,该数组已表示为三行四列。

示例 2:相当于 C ravel,然后是 C reshape

ravel() 函数用于创建连续的扁平化数组。返回一个包含输入元素的数组(一维)。仅在需要时才进行复制。

输出

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
array([[ 0,  1,  2,  3],
       	[ 4,  5,  6,  7],
       	[ 8,  9, 10, 11]])

示例 3:类似 Fortran 的索引排序

输出

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
array([[ 0,  4,  8],
       	[ 1,  5,  9],
       	[ 2,  6, 10],
       	[ 3,  7, 11]])

在上面的代码中

  • 我们使用别名 np 导入了 numpy。
  • 我们使用 np.arrange() 函数创建了一个数组“a”。
  • 我们声明了变量“y”并分配了 np.reshape() 函数的返回值。
  • 我们在函数中传递了数组“x”和形状以及类似 Fortran 的索引顺序。
  • 最后,我们尝试打印 arr 的值。

在输出中,该数组已表示为四行三列。

示例 4:类似 Fortran 的索引排序

输出

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
array([[ 0,  4,  8],
       	[ 1,  5,  9],
       	[ 2,  6, 10],
       	[ 3,  7, 11]])

示例 5:未指定的值被推断为 2

在上面的代码中

  • 我们使用别名 np 导入了 numpy。
  • 我们使用 np.arrange() 函数创建了一个数组“a”。
  • 我们声明了变量“y”并分配了 np.reshape() 函数的返回值。
  • 我们在函数中传递了数组“x”和形状(未指定的值)。
  • 最后,我们尝试打印 arr 的值。

在输出中,该数组已表示为两行五列。

输出

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
array([[ 0,  1,  2,  3,  4,  5],
       	[ 6,  7,  8,  9, 10, 11]])