NumPy 的 Array 介紹

NumPy 的 Array 介紹

NumPy arrays have a fixed size at creation, unlike Python lists (which can grow dynamically). Changing the size of an ndarray will create a new array and delete the original.

NumPy 裡面的 Array 與 Python 原生 List 不同,他是固定大小的,不像 Python List 可以動態增減。因此,要改變大小只能刪除原先的多維陣列並重新做一個多維陣列。

The elements in a NumPy array are all required to be of the same data type, and thus will be the same size in memory.

還有另一個重點便是,NumPy 所有元件都需要是相同大小的,如此才能在記憶體有相同的 Size。

NumPy arrays facilitate advanced mathematical and other types of operations on large numbers of data. Typically, such operations are executed more efficiently and with less code than is possible using Python’s built-in sequences.

NumPy 更適合用於數學運算與資料較龐大時的運算,使用 NumPy 會讓你程式碼更有效率之外,也能用較少程式碼來完成。

A growing plethora of scientific and mathematical Python-based packages are using NumPy arrays; though these typically support Python-sequence input, they convert such input to NumPy arrays prior to processing, and they often output NumPy arrays. In other words, in order to efficiently use much (perhaps even most) of today’s scientific/mathematical Python-based software, just knowing how to use Python’s built-in sequence types is insufficient – one also needs to know how to use NumPy arrays.

且現有用於科學及數學運算的套件都使用 NumPy,雖然他們通常也支援原生 Python 資料型態輸入,但是會轉換成 NumPy 來作運算,而且輸出通常也都是 NumPy Array。換句話說,為了使科學與數學運算更有效率都使用 NumPy,因為原生的 Python 資料型態比較沒有這麼快。

N-dimensional array (ndarray)

如同前言所述,在 NumPy 當中,Array 之中的每一個元素都必須是相同型態(相同大小)的。

名詞釋義

  • shape:定義多維陣列的大小(例:3 * 4 * 5 的三維陣列),型態是 tuple。

Example

可以從這個例子裡面看到,只需要把多維陣列餵到 np.array 之中,並指定它的資料型態就可以了,我們也能透過 type 指令去知道 xnumpy.ndarray (多維陣列)

這個例子當中,可以直接用這種方式來得到 Array value.

至於在這個範例當中,y 被 assign 成 x 的 [:, 1] (代表取 x 第二個維度 index = 1 的陣列),而且這邊是 Pass by reference 的概念,所以原本的二維陣列 x 值於 y[0] = 9 時被更改了。

Array attributes

  • ndarray.shape: 多維陣列的大小(形狀)
  • ndarray.ndim: 多維陣列的維度
  • ndarray.itemsize: 陣列當中元素的大小(佔幾個 byte)
  • ndarray.nbytes: 整個陣列所有元素的大小總計
  • ndarray.T: 轉置矩陣,只能在維度 <= 2 的時候使用,與 self.transpose() 效果相同
  • ndarray.flat: 把陣列扁平化輸出

Array.conversion

  • ndarray.item: 類似 List 的 Index,把 Array 扁平化取得某 Index 的 value
  • ndarray.tolist: 把 NumPy.ndarray 輸出成 Python 原生 List 型態
  • ndarray.itemset: 把 ndarray 中的某個值(純量)改掉,使用範例如下

  • ndarray.tofile(file_obj): 把 ndarray 以 byte 的方式寫到檔案中

Shape manipulation

  • ndarray.reshape(shape): 把同樣的資料以不同的 shape 輸出(array 的 total size 要相同)
  • ndarray.resize(shape): 重新定義陣列的大小
  • ndarray.flatten(): 把多維陣列收合成一維陣列(扁平化&Copy)
  • ndarray.ravel(): 回傳扁平化的陣列(無 Copy)

在此處所說的有無 Copy 代表著什麼呢?
讓我們看看一個例子:

在這個例子當中可以看到,如果使用的是 flatten 這個有註明 Copy 的函式的話,值則不會被改變,因為 flatten 回傳的是一個複製品。在另一種狀況 ravel 則是像 Reference 的方式,改變它的值也會影響到原本的物件。

Item selection and manipulation

  • ndarray.take(indices): 根據輸入索引值來得到指定陣列
  • ndarray.put(indices, values): 根據索引值改變陣列 value
  • ndarray.repeat(times): 重複陣列的值(類似擴張)

  • ndarray.sort(): 把陣列當中的元素排序

  • ndarray.sum(): 加總多維陣列(可指定加總的維度根據)

當然還有很多其他的 Function 可以使用,以上僅挑選我認為較常使用到的出來說明,更多資訊請查閱 這個 Document

Leave a Reply

Your email address will not be published. Required fields are marked *