NumPy 陣列切片及資料型別介紹

小万哥丶發表於2024-05-07

NumPy 陣列切片

NumPy 陣列切片用於從陣列中提取子集。它類似於 Python 中的列表切片,但支援多維陣列。

一維陣列切片

要從一維陣列中提取子集,可以使用方括號 [] 並指定切片。切片由起始索引、結束索引和可選步長組成,用冒號 : 分隔。

語法:

arr[start:end:step]
  • start:起始索引(預設為 0)。
  • end:結束索引(不包括)。
  • step:步長(預設為 1)。

示例:

import numpy as np

# 建立一維陣列
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# 從第二個元素到第五個元素(不包括)
print(arr[1:5])  # 輸出:array([2, 3, 4])

# 從頭到尾,每隔一個元素
print(arr[::2])  # 輸出:array([1, 3, 5, 7, 9])

# 從倒數第三個元素到倒數第一個元素
print(arr[-3:-1])  # 輸出:array([8, 9])

二維陣列切片

要從二維陣列中提取子集,可以使用逗號分隔的兩個索引,每個索引表示相應維度的切片。

語法:

arr[start_row:end_row, start_col:end_col:step]
  • start_row:起始行索引(預設為 0)。
  • end_row:結束行索引(不包括)。
  • start_col:起始列索引(預設為 0)。
  • end_col:結束列索引(不包括)。
  • step:步長(預設為 1)。

示例:

import numpy as np

# 建立二維陣列
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 從第二行到第三行,第一列到第三列(不包括)
print(arr[1:3, 0:3])  # 輸出:array([[4, 5, 6], [7, 8, 9]])

# 從第一行到第三行,每隔一列
print(arr[::2, :])  # 輸出:array([[1, 3, 5], [7, 9]])

# 從第一行到第三行,第二列
print(arr[:, 1])  # 輸出:array([2, 5, 8])

練習

建立一個 5x5 的二維陣列 arr,並列印以下子集:

  • 第一行的所有元素
  • 第二列的所有元素
  • 從左上角到右下角的對角線元素
  • 2x2 的子陣列,從第二行第三列開始

在評論中分享您的程式碼和輸出。

Sure, here is the requested Markdown formatted content:

NumPy 資料型別

NumPy 陣列由同型別元素組成,並具有指定的資料型別。資料型別定義了陣列中元素的儲存方式和允許的操作。

NumPy 中的資料型別

NumPy 具有比 Python 更豐富的基本資料型別,並使用首字母大寫字元來表示它們:

  • i: 整數(int)
  • b: 布林值(bool)
  • u: 無符號整數(unsigned int)
  • f: 浮點數(float)
  • c: 複數浮點數(complex float)
  • m: 時間差(timedelta)
  • M: 日期時間(datetime)
  • O: 物件(object)
  • S: 字串(string)
  • U: Unicode 字串(unicode string)
  • V: 可變長度位元組(void)

檢查陣列的資料型別

NumPy 陣列具有一個屬性 dtype,用於獲取陣列元素的資料型別。

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
print(arr.dtype)

輸出:

int32

使用指定資料型別建立陣列

我們可以使用 np.array() 函式並指定 dtype 引數來建立具有指定資料型別的陣列。

import numpy as np

arr = np.array([1, 2, 3, 4, 5], dtype='float64')
print(arr)
print(arr.dtype)

輸出:

[1. 2. 3. 4. 5.]
float64

轉換陣列的資料型別

我們可以使用 astype() 方法轉換現有陣列的資料型別。

import numpy as np

arr = np.array([1.1, 2.2, 3.3, 4.4, 5.5])
new_arr = arr.astype(int)
print(new_arr)
print(new_arr.dtype)

輸出:

[1 2 3 4 5]
int32

NumPy 資料型別簡表

資料型別 字元 描述
整數 i 有符號整數
布林值 b True 或 False
無符號整數 u 無符號整數
浮點數 f 固定長度浮點數
複數浮點數 c 複數浮點數
時間差 m 時間間隔
日期時間 M 日期和時間
物件 O Python 物件
字串 S 固定長度字串
Unicode 字串 U 可變長度 Unicode 字串
可變長度位元組 V 用於其他型別的固定記憶體塊

練習

建立以下 NumPy 陣列,並列印它們的元素和資料型別:

  • 一個包含 10 個隨機整數的陣列。
  • 一個包含 5 個布林值的陣列。
  • 一個包含 7 個複雜數的陣列。
  • 一個包含 10 個日期時間物件的陣列。

在評論中分享您的程式碼和輸出。

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章