當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。