iT邦幫忙

2021 iThome 鐵人賽

DAY 26
1
Software Development

宇宙 69 大魔王的 python 世界系列 第 26

【Day 26】NumPy (3):Slicing, Copy, View, shape, Concatenate

前言

今天要來繼續介紹 NumPy 的應用,包括了 Slicing 索引,Copy, View 複製, Shape, Reshape, Concatenate 等等內容。

NumPy

Slicing

NumPy 中的矩陣,也可以透過像 list 一樣的方法去取出。
語法一樣也是 [start:end:step]

如圖,取出這個矩陣的第 1 個到第 4 個元素

import numpy as np

array1 = np.array([1, 2, 3, 4, 5, 6, 7, 8])

print(array1[1:5])

# 輸出
# [2 3 4 5]

Slicing 2-D Arrays

在 2-D 的矩陣也可以使用 Slicing 來取出元素,如下程式為取出第一個 row 的 1-2 個元素。

import numpy as np

array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])

print(array1[1, 1:3])

# 輸出
# [6 7]

底下為取出第 0-1 個 row,並取出他們的第 1-2 個元素。

import numpy as np

array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])

print(array1[0:2, 1:3])

# 輸出
# [[2 3]
#  [6 7]]

複製矩陣:Copy & View

這兩個函式的差別在於,.copy() 是複製一個新的 array,所以改變 copy 後的 array 並不會改變到原本的 array,.view() 是給你看到原本的矩陣而已,所以改變的話會把原本的 array 也改變。我們看一下底下的例子會更清楚。

  • .copy()

    底下 array1 為原本的 array,並且用 .copy() 函式來複製一個一樣的 array 給 x,這時若改變 x,並不會對原本的 array1 造成影響。

    import numpy as np
    
    array1 = np.array([1, 2, 3, 4])
    x = array1.copy()
    x[0] = 4
    
    print(x)         # [4 2 3 4]
    print(array1)    # [1 2 3 4]
    
  • .view()

    底下 array1 為原本的 array,並且用 .view() 函式來把 array1y 看見,這時若改變 y,相當於改變了 array1

    import numpy as np
    
    array1 = np.array([1, 2, 3, 4])
    y = array1.view()
    y[0] = 4
    
    print(y)         # [4 2 3 4]
    print(array1)    # [4 2 3 4]
    

Shape

  • 得到矩陣的 dimesions

    使用 .shape 函式,可以得到現在這個 array 的 dimesions,像底下就代表這個 array 有 2 個 dimesions,並且每個 dimesions 有 4 個 element。

    import numpy as np
    
    array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    
    print(array1.shape)
    
    # 輸出
    # (2, 4)
    

    也可以透過這個函式調整 array 的維度,把它改為 4 x 2 的 array,他會直接改變原本的 array

    import numpy as np
    
    array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    array1.shape = (4, 2)
    
    print(array1)
    
    # 輸出
    # [[1 2]
    #  [3 4]
    #  [5 6]
    #  [7 8]]
    

reshape

調整 array 的維度,但不會改變原本的 array,而是創建一個副本。

import numpy as np

array1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
y = array1.reshape(4, 2)

print(array1)
# 輸出
# [[1 2 3 4]
#  [5 6 7 8]]
print(y)
# 輸出
# [[1 2]
#  [3 4]
#  [5 6]
#  [7 8]]

NumPy 中的常數

代號 數字
Inf = inf = infty = Infinity = PINF 正無限大 +∞
NINF 負無限大 -∞
PZERO 正 0
NZERO 負 0
nan = NaN = NAN 非數值
e 自然數 e
pi π
newaxis None 的別稱
print(np.inf)
print(np.NINF)
print(np.PZERO)
print(np.NZERO)
print(np.nan)
print(np.e)
print(np.pi)
print(np.euler_gamma)
print(np.newaxis)

# 輸出
# inf
# -inf
# 0.0
# -0.0
# nan
# 2.718281828459045
# 3.141592653589793
# None

合併陣列

  • np.concatenate():如果需要把兩個 array 合併的時候,就可以使用這個函式。

    a = np.array([1, 2, 3, 4])
    b = np.array([5, 6, 7, 8])
    
    print(np.concatenate([a, b]))
    
    # 輸出
    # [1 2 3 4 5 6 7 8]
    

結語

NumPy 真的太多函式可以使用,今天就先暫時介紹到這邊了!明天再繼續。

待續...


上一篇
【Day 25】NumPy (2)
下一篇
【Day 27】NumPy (4):np.sqrt(), np.square()
系列文
宇宙 69 大魔王的 python 世界30

尚未有邦友留言

立即登入留言