1. 程式人生 > >Numpy學習筆記(二)

Numpy學習筆記(二)

重復 一個數 另一個 存在 axis2 操作 翻轉 import sta

(1)NumPy - 切片和索引

l ndarray對象中的元素遵循基於零的索引。 有三種可用的索引方法類型: 字段訪問,基本切片和高級索引。

l 基本切片 Python 中基本切片概念到 n 維的擴展。切片只是返回一個觀圖。

l 如果一個ndarray是非元組序列,數據類型為整數或布爾值的ndarray,或者至少一個元素為序列對象的元組,我們就能夠用它來索引ndarray。高級索引始終返回數據的副本。 有兩種類型的高級索引:整數和布爾值。

整數索引實例

import numpy as np 
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
y = x[[0,1,2],  [0,1,0]]  
print y

輸出如下:[1 4 5]

布爾索引實例

import numpy as np

a = np.array([np.nan, 1,2,np.nan,3,4,5])

print a[~np.isnan(a)]

輸出如下[ 1.   2.   3.   4.   5.]

(2)NumPy廣播

廣播是指 NumPy 在算術運算期間處理不同形狀的數組的能力。

如果兩個陣列具有完全相同的形狀,則這些操作被無縫執行。如果兩個數組的維數不相同,則元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以對形狀不相似的數組進行操作,因為它擁有廣播功能。 較小的數組會廣播

到較大數組的大小,以便使它們的形狀可兼容。

如果滿足以下規則,可以進行廣播

  • ndim較小的數組會在前面追加一個長度為 1 的維度。
  • 輸出數組的每個維度的大小是輸入數組該維度大小的最大值。
  • 如果輸入在每個維度中的大小與輸出大小匹配,或其值正好為 1,則在計算中可它。
  • 如果輸入的某個維度大小為 1,則該維度中的第一個數據元素將用於該維度的所有計算。

如果上述規則產生有效結果,並且滿足以下條件之一,那麽數組被稱為可廣播的

  • 數組擁有相同形狀。
  • 數組擁有相同的維數,每個維度擁有相同長度,或者長度為 1。
  • 數組擁有極少的維度,可以在其前面追加長度為 1 的維度,使上述條件成立。

(3)NumPy - 數組上的叠代

  • NumPy 包包含一個叠代器對象numpy.nditer。 它是一個有效的多維叠代器對象,可以用於在數組上進行叠代。 數組的每個元素可使用 Python 的標準Iterator接口來訪問。
  • nditer對象有另一個可選參數op_flags。 其默認值為只讀,但可以設置為讀寫或只寫模式。 這將允許使用此叠代器修改數組元素。nditer類的構造器擁有flags參數,它可以接受下列值:

序號 參數及描述

1. c_index 可以跟蹤 C 順序的索引

2. f_index 可以跟蹤 Fortran 順序的索引

3. multi-index 每次叠代可以跟蹤一種索引類型

4. external_loop 給出的值是具有多個值的一維數組,而不是零維數組

如果兩個數組是可廣播的,nditer組合對象能夠同時叠代它們。 假設數組a具有維度 3X4,並且存在維度為 1X4 的另一個數組b,則使用以下類型的叠代器(數組b被廣播到a的大小)。

(4)NumPy - 數組操作

修改形狀

  • numpy.reshape不改變數據的條件下修改形狀:numpy.reshape(arr, newshape, order‘)
  • numpy.ndarray.flat該函數返回數組上的一維叠代器,行為類似 Python 內建的叠代器。
  • numpy.ndarray.flatten該函數返回折疊為一維的數組副本:ndarray.flatten(order),其中:order:‘C‘ — 按行,‘F‘ — 按列,‘A‘ — 原順序,‘k‘ — 元素在內存中的出現順序
  • numpy.ravel這個函數返回展開的一維數組,並且按需生成副本。返回的數組和輸入數組擁有相同數據類型:numpy.ravel(a, order)

翻轉操作

  • numpy.transpose翻轉給定數組的維度。如果可能的話它會返回一個視圖。函數接受下列參數:numpy.transpose(arr, axes)
  • numpy.ndarray.T該函數屬於ndarray類,行為類似於numpy.transpose
  • numpy.rollaxis該函數向後滾動特定的軸,直到一個特定位置。這個函數接受三個參數:numpy.rollaxis(arr, axis, start)
  • numpy.swapaxes該函數交換數組的兩個軸。numpy.swapaxes(arr, axis1, axis2)

修改維度

  • broadcast 此功能模仿廣播機制。 它返回一個對象,該對象封裝了將一個數組廣播到另一個數組的結果。
  • numpy.broadcast_to此函數將數組廣播到新形狀。 它在原始數組上返回只讀視圖。 它通常不連續。 如果新形狀不符合 NumPy 的廣播規則,該函數可能會拋出ValueError。numpy.broadcast_to(array, shape, subok)
  • numpy.expand_dims函數通過在指定位置插入新的軸來擴展數組形狀:numpy.expand_dims(arr, axis)
  • numpy.squeeze函數從給定數組的形狀中刪除一維條目: numpy.squeeze(arr, axis)

數組的連接

  • numpy.concatenate數組的連接是指連接。 此函數用於沿指定軸連接相同形狀的兩個或多個數組。 該函數接受以下參數。numpy.concatenate((a1, a2, ...), axis)
  • numpy.stack此函數沿新軸連接數組序列:numpy.stack(arrays, axis)
  • numpy.vstacknumpy.stack函數的變體,通過堆疊來生成豎直的單個數組
  • numpy.hstacknumpy.stack函數的變體,通過堆疊來生成水平的單個數組

數組分割

  • numpy.split該函數沿特定的軸將數組分割為子數組。numpy.split(ary, indices_or_sections, axis)
  • numpy.hsplit是split()函數的特例,其中軸為 1 表示水平分割,無論輸入數組的維度是什麽。
  • numpy.vsplit是split()函數的特例,其中軸為 0 表示豎直分割,無論輸入數組的維度是什麽。

添加/刪除元素

  • numpy.resize此函數返回指定大小的新數組。 如果新大小大於原始大小,則包含原始數組中的元素的重復副本。numpy.resize(arr, shape)
  • numpy.append此函數在輸入數組的末尾添加值。 附加操作不是原地的,而是分配新的數組。 此外,輸入數組的維度必須匹配否則將生成ValueError。numpy.append(arr, values, axis)
  • numpy.insert此函數在給定索引之前,沿給定軸在輸入數組中插入值。 如果值的類型轉換為要插入,則它與輸入數組不同。 插入沒有原地的,函數會返回一個新數組。 此外,如果未提供軸,則輸入數組會被展開。numpy.insert(arr, obj, values, axis)
  • numpy.delete此函數返回從輸入數組中刪除指定子數組的新數組。與insert()函數的情況一樣,如果未提供軸參數,則輸入數組將展開。Numpy.delete(arr, obj, axis)
  • numpy.unique 此函數返回輸入數組中的去重元素數組。 該函數能夠返回一個元組,包含去重數組和相關索引的數組。 索引的性質取決於函數調用中返回參數的類型。numpy.unique(arr, return_index, return_inverse, return_counts)

Numpy學習筆記(二)