NumPy基礎與數組創建

NumPy基礎

NumPy的主要對象是存放同類型元素的多維數組,即所有的元素都是一種類型、通過一個正整數元組索引(通常元素是數字)。

例如,3維空間中一個點的座標爲[1, 2, 3],就是一個秩爲1的數組,它只有一個軸,軸長度爲3. 又如,在以下例子中,數組的秩爲2(有兩個維度), 第一個維度長度爲2, 第二個維度長度爲3.

[[ 1., 0., 0.],
[ 0., 1., 2.]]

NumPy的數組類被稱作ndarray,簡稱爲數組。
注意numpy.array和標準Python庫類array.array並不相同,後者只處理一維數組和提供少量功能。更多ndarray對象屬性有:

  • ndarray.ndim: 數組軸的個數,在python的世界中,軸的個數被稱作秩。
  • ndarray.shape: 指示數組在每個維度上大小的整數元組。例如一個n行m列的矩陣,它的shape屬性將是(n,m)。
  • ndarray.size: 數組元素的總個數,等於shape屬性元組中元素的乘積。
  • ndarray.dtype: 描述數組中元素類型。
  • ndarray.itemsize: 數組中每個元素的字節大小。

例:

>>> import numpy as np
>>> a = np.arange(15).reshape(3,5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int32'
>>> a.itemsize
4
>>> a.size
15
>>> type(a)
<class 'numpy.ndarray'>
>>> b = np.array([6,7,8])
>>> b
array([6, 7, 8])
>>> type(b)
<class 'numpy.ndarray'>

創建數組

提供多種創建數組的方法。

>>> import numpy as np
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int32')
>>> b = np.array([1.2,3.5,5.1])
>>> b.dtype
dtype('float64')

數組將兩層序列嵌套轉化成二維的數組,三層序列嵌套轉化成三維數組。數組類型可以在創建時顯示指定。

>>> b = np.array([(1.5,2,3),(4,5,6)])
>>> b
array([[ 1.5,  2. ,  3. ],
       [ 4. ,  5. ,  6. ]])
>>> c = np.array([[1,2],[3,4]],dtype=complex)
>>> c
array([[ 1.+0.j,  2.+0.j],
       [ 3.+0.j,  4.+0.j]])

通常,初始化時只能確定數組的大小,具體元素未知。因此,NumPy提供了使用佔位符創建數組的函數。
函數 zeros() 創建全 0 數組,函數 ones() 創建全 1 數組,函數 empty() 創建一個內容隨機數組。

>>> np.zeros((3,4))
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> np.ones((2,3,4),dtype='int16')
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],
       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int16)
>>> np.empty((2,3))
array([[ 1.5,  2. ,  3. ],
       [ 4. ,  5. ,  6. ]])

創建一個數列,NumPy提供一個類似arange的函數返回數組:

>>> np.arange(10,30,5)
array([10, 15, 20, 25])
>>> np.arange(0,2,0.3)
array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

打印數組
當你打印一個數組,NumPy以類似嵌套列表的形式顯示它,但是呈以下佈局:
一維數組被打印成行,二維數組成矩陣,三維數組成矩陣列表。

>>> a = np.arange(6)
>>> print(a)
[0 1 2 3 4 5] 
>>> b = np.arange(12).reshape(4,3)
>>> print(b)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
>>> c = np.arange(24).reshape(2,3,4)
>>> print(c)
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

如果一個數組太大了,NumPy自動省略中間部分而只打印頭尾。

>>> print(np.arange(10000))
[   0    1    2 ..., 9997 9998 9999]
>>> print(np.arange(10000).reshape(100,100))
[[   0    1    2 ...,   97   98   99]
 [ 100  101  102 ...,  197  198  199]
 [ 200  201  202 ...,  297  298  299]
 ...,
 [9700 9701 9702 ..., 9797 9798 9799]
 [9800 9801 9802 ..., 9897 9898 9899]
 [9900 9901 9902 ..., 9997 9998 9999]]

禁用NumPy的這種行爲並強制打印整個數組,可以設置 printoptions參數來更改打印選項。

>>> set_printoptions(threshold='nan')

參考自微信公衆號:機器學習算法與Python學習,收藏 | Numpy詳細教程,2018年11月26日。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章