当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python numpy reshape用法及代码示例


本文简要介绍 python 语言中 numpy.reshape 的用法。

用法:

numpy.reshape(a, newshape, order='C')

在不更改其数据的情况下为数组赋予新形状。

参数

a array_like

要重塑的阵列。

newshape int 或整数元组

新形状应与原始形状兼容。如果是整数,则结果将是该长度的一维数组。一个形状维度可以是-1。在这种情况下,该值是从数组的长度和剩余维度推断出来的。

order {‘C’, ‘F’, ‘A’},可选

使用此索引顺序读取 a 的元素,并使用此索引顺序将元素放入重构的数组中。 ‘C’表示使用C-like索引顺序读取/写入元素,最后一个轴索引变化最快,回到第一个轴索引变化最慢。 ‘F’表示使用Fortran-like索引顺序读取/写入元素,第一个索引变化最快,最后一个索引变化最慢。请注意,“C”和“F”选项不考虑底层数组的内存布局,只考虑索引的顺序。 “A”表示如果 a 在内存中是 Fortran 连续的,则以 Fortran-like 索引顺序读取/写入元素,否则以 C-like 顺序读取/写入元素。

返回

reshaped_array ndarray

如果可能,这将是一个新的视图对象;否则,它将是一个副本。请注意,不保证返回数组的内存布局(C 或 Fortran 连续)。

注意

在不复制数据的情况下,并非总是可以更改数组的形状。如果您希望在复制数据时引发错误,您应该将新形状分配给数组的形状属性:

>>> a = np.zeros((10, 2))

# A transpose makes the array non-contiguous
>>> b = a.T

# Taking a view makes it possible to modify the shape without modifying
# the initial object.
>>> c = b.view()
>>> c.shape = (20)
Traceback (most recent call last):
   ...
AttributeError: Incompatible shape for in-place modification. Use
`.reshape()` to make a copy with the desired shape.

order 关键字为从 a 中获取值以及将值放入输出数组中的索引排序。例如,假设您有一个数组:

>>> a = np.arange(6).reshape((3, 2))
>>> a
array([[0, 1],
       [2, 3],
       [4, 5]])

您可以将重塑视为首先拆散数组(使用给定的索引顺序),然后使用与用于拆解相同的索引顺序将拆散数组中的元素插入到新数组中。

>>> np.reshape(a, (2, 3)) # C-like index ordering
array([[0, 1, 2],
       [3, 4, 5]])
>>> np.reshape(np.ravel(a), (2, 3)) # equivalent to C ravel then C reshape
array([[0, 1, 2],
       [3, 4, 5]])
>>> np.reshape(a, (2, 3), order='F') # Fortran-like index ordering
array([[0, 4, 3],
       [2, 1, 5]])
>>> np.reshape(np.ravel(a, order='F'), (2, 3), order='F')
array([[0, 4, 3],
       [2, 1, 5]])

例子

>>> a = np.array([[1,2,3], [4,5,6]])
>>> np.reshape(a, 6)
array([1, 2, 3, 4, 5, 6])
>>> np.reshape(a, 6, order='F')
array([1, 4, 2, 5, 3, 6])
>>> np.reshape(a, (3,-1))       # the unspecified value is inferred to be 2
array([[1, 2],
       [3, 4],
       [5, 6]])

相关用法


注:本文由纯净天空筛选整理自numpy.org大神的英文原创作品 numpy.reshape。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。