KSLab_M1
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Help
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # W2教材大綱: Python基礎 :::info 共編、註記方法 - 打勾代表這一頁要用 - 刪除 : ~~導向~~ - 其他需要新增的細節,學姊註解, - 例如: ===> Anna 學姊 : 這邊增加圖片 ::: ## Source - Anna學姊Python課PPT - 成為python數據分析達人的第一堂課 3 & 4 ## 課堂投影片與練習 - [ ] Python基礎資料型態介紹 - 參考Anna學姊Python教材 --- - [ ] **為什麼學習 NumPy 與 Array?** * 數據分析是當前重要的技能。 * Python 是數據分析的熱門工具。 * NumPy 是 Python 在科學計算及數據分析中**最重要**的套件。 * 學習 NumPy 能讓您更有效地處理和分析數據。 * 一個**核心概念**是「陣列導向程式設計」。 --- - [x] **核心概念:陣列導向程式設計 (Array-Oriented Programming)** * 這是數據分析中**非常重要**的概念。 * **核心思想:少用 for 迴圈,多用 Array**。 * 可以將 for 迴圈視為一個應「禁用」的項目,盡量用 Array 來取代。 * **原因:計算速度**。 * 使用 Array 進行計算可以**大幅提升速度**,尤其在處理大量數據時,比傳統 for 迴圈更有效率。 * **目標:** 不到最後關頭,應盡量使用 Array 這種**向量處理方式**,而非 List。 --- - [x] **NumPy 介紹 - 數據分析的基石** * NumPy 套件是 Python 在科學計算及數據分析中**最重要**的套件之一。 * NumPy 的核心資料形態是 **array (陣列)**。 * Array 在外觀和感覺上與 Python 的 **list (列表)** 非常相似。 * 但 Array 專為數值計算進行了最佳化,支援高效的陣列導向運算。 --- - [x] **Python 套件的正規匯入方式** * 正確地匯入所需的 Python 套件是良好的程式習慣。 * **不推薦**的匯入方式: * `Pilab inline`:會偷偷匯入許多套件,方式比較混亂,應**禁用**。 * `from package import *` (使用星號 `*` 匯入套件的所有指令)。 * **不推薦 `import *` 的原因:** * 不同套件可能會有**同名指令**。 * 例如:`random` 套件和 `numpy.random` 套件都有 `random.randint`,但它們的行為可能不同 (`random` 包含上限值,`numpy.random` 不包含)。 * 這會導致**混淆且難以除錯**。 --- - [x] **Python 套件的正規匯入方式** * 正規的匯入方式包括 `from package import specific_function` 或直接 `import package`。 * **最推薦且業界標準的匯入方式:** 使用 **`import package as alias`**。 * 這樣可以方便地使用套件中的所有指令,同時避免名稱衝突。 * 使用時,在指令前加上定義好的縮寫 (alias) 即可,例如 `np.sign()`。 * **標準縮寫慣例:** * **NumPy 套件:** 標準縮寫是 **`np`** (`import numpy as np`)。**幾乎所有**程式設計師都這樣縮寫。 * **Matplotlib 的繪圖模組 (`matplotlib.pyplot`):** 標準縮寫是 **`plt`** (`import matplotlib.pyplot as plt`)。 * 使用標準縮寫能展現程式設計師的**涵養**。 --- - [ ] **Jupyter Notebook 編輯器介紹** > from - 大數據分析與資料探勘 W2 P6 - Jupyter Notebook 是一個IPython的Web擴充模組,讓使用者可在瀏覽器中進行程式的開發與執行,或撰寫說明文件。 - 執行Anaconda下的Jupyter Notebook即可開啟,預設的路徑為<c:\Users\帳號名稱>,下方會列出預設路徑下所有資料夾及檔案,新建檔案也會儲存於此路徑中。 - 建立Jupyter Notebook檔案:點選New按鈕,在下拉式選單中點選Python3項目即可建立Python程式檔(點選TextFile項目建立文字檔,Folder項目建立資料夾)。 - Jupyter Notebook是以Cell作為輸入及執行單位,使用者在Cell中撰寫及執行程式,一個檔案可包含多個Cell,建立新檔案時,預設產生一個Cell。 - 新檔案名稱為Untitled,點選後可於對話方塊中輸入新檔案名稱,按下Rename完成修改。 - Jupyter Notebook簡易智慧輸入:簡易智慧輸入功能與Spyder編輯器雷同,在Cell中輸入部分指令文字後按Tab鍵,系統會列出所有可用的項目供使用者選取,可按上或下移動選取項目,確認後按下Enter即可。 - 輸入完程式後,可以按下工具列的Run鈕或Shift+Enter執行程式,結果後呈現在Cell下方並新增一個新Cell。若按下Ctrl+Enter同樣會執行程式並產生結果,但游標會停留在原有Cell,不會新增Cell。 - Jupyter Notebook的檔案附加檔名為.ipynb,若要開啟舊檔,就點選資料夾中附檔名為.ipynb的檔案。 - Jupyter Notebook在開發頁面中分為兩種模式: - 編輯模式:用來開發程式的模式。用滑鼠點選Cell後,左方邊框呈現綠色,此時為編輯模式,使用者可進行程式開發。 - 命令模式:用來管理Cell的模式。按下Esc鍵,會使左方邊框呈現藍色,此時為命令模式,使用者可進行新增Cell、刪除Cell等動作。其中,按下A(或B)可在目前Cell上方(或下方)新增Cell,連按兩次D可刪除目前Cell。 - 使用markdown做筆記(註解): Jupyter Notebook中Cell預設狀態為Code,供使用者輸入程式碼,在Cell前都會顯示in[]:,若要在Cell中進行註解,則必須將狀態切換到markdown,輸入文字後按下Ctrl+Enter。 - 匯出為其他格式檔案: 由File/Download as 選擇所要匯出的檔案格式。 --- - [x] **Jupyter Notebook 的標準起始設定** * 每次在 Jupyter Notebook 中開始數據分析時,建議養成習慣先執行幾個標準指令。 * 標準的起始設定: 1. **`matplotlib inline`**: * 取代了不推薦的 `Pilab inline`。 * 目的是讓 Matplotlib 繪製的圖形**直接顯示在網頁上**。 2. **匯入 NumPy 套件並縮寫為 `np`:** `import numpy as np`。 3. **匯入 Matplotlib 的繪圖模組並縮寫為 `plt`:** `import matplotlib.pyplot as plt`。 * (提示:善用 **TAB 鍵** 來自動補齊指令,避免拼字錯誤)。 --- - [x] **對應課堂練習一:標準起始設定與套件匯入** 1. **任務:** 在您的 Jupyter Notebook 中,執行標準的起始設定三行程式碼。 * `%matplotlib inline` * `import numpy as np` * `import matplotlib.pyplot as plt` 2. **任務:** 嘗試使用 `import numpy as np` 方式匯入 NumPy 套件,並使用 `np.sin(3)` 計算 sin(3) 的值。 3. **任務:** 解釋為什麼不推薦使用 `from package import *` (星號) 的方式匯入套件。請舉例說明可能遇到的問題 (例如:`random.randint` 在不同套件中的行為差異)。 4. **提示:** 在打程式碼時,善用 TAB 鍵來自動補齊指令。 --- - [x] **Array 的快速生成方法** * 從 List 轉換:使用 `np.array(your_list)`。 * 生成特定值的 Array: * 全為零的 Array:`np.zeros(shape)`。 * 全為一的 Array:`np.ones(shape)`。 * 生成單位矩陣 (Identity Matrix):`np.eye(size)`。 * 生成等間距的數字序列:`np.linspace(start, stop, num)`。 (常用於繪製函數圖形的 X 軸數據) * 生成亂數 Array: * `np.random.rand()`:生成 0 到 1 之間的均勻分佈亂數。 * `np.random.randn()`:生成平均值為 0、標準差為 1 的常態分佈亂數。 --- - [ ] **對應課堂練習二:Array 的生成與基本操作** 1. **任務:** 建立一個 Python List,包含數字 ``。將這個 List 轉換成一個 NumPy Array,並將其賦值給變數 `my_array`。 2. **任務:** 建立一個形狀為 (3, 4),所有元素皆為 0 的 NumPy Array。 3. **任務:** 建立一個形狀為 (2, 5),所有元素皆為 1 的 NumPy Array。 4. **任務:** 建立一個 4x4 的單位矩陣 (Identity Matrix)。 5. **任務:** 使用 `np.linspace()` 生成一個包含 100 個點的 Array,範圍從 -π 到 π (可以使用 `np.pi`)。將其賦值給變數 `x_values`。 --- - [ ] **陣列導向運算範例 (一):Array 與純量運算** * Array 與純量 (scalar) 進行運算 (例如:加、減、乘、除) 時。 * 該運算會應用到 Array 中的**每一個元素**。 * **範例:** 貨幣換算。 * 若使用 List 儲存價格,換算所有價格需要一個 for 迴圈。 * 若使用 Array 儲存價格,只需要簡單的一行乘法指令 (`prices_array * exchange_rate`) 即可一次完成所有換算。 --- - [x] **對應課堂練習三:陣列導向運算:取代 For 迴圈 (貨幣換算)** 1. **情境:** 假設您有一些商品的價格 (美金),儲存在一個 Python List 中:`usd_prices = [1096.95, 596.95, 896.95]`。當前的匯率是 1 美金 = 30.1 台幣。 2. **任務 (傳統方式 - 練習理解為何不推薦):** * 使用一個 `for` 迴圈,逐一取出 `usd_prices` 中的美金價格。 * 將每個美金價格乘以匯率 `30.1` 轉換為台幣價格。 * 將計算出的台幣價格添加到一個新的 List `twd_prices_list` 中 (可以使用 `.append()`)。 * 印出 `twd_prices_list` 的內容。 3. **任務 (陣列導向方式):** * 將 `usd_prices` List 轉換成一個 NumPy Array,並賦值給變數 `usd_prices_array`。 * 直接將 `usd_prices_array` 乘以匯率 `30.1`,將結果賦值給變數 `twd_prices_array`。 * 印出 `twd_prices_array` 的內容。 4. **討論:** 比較使用 `for` 迴圈和使用 Array 導向方式進行貨幣換算的程式碼長度和易讀性。回憶課程中提到的陣列導向優勢是什麼? --- - [x] **陣列導向運算範例 (二):內積 (Dot Product)** * 內積是用於計算兩個向量的對應元素相乘後加總的運算。 * 在數據分析中常用於計算**加權總和**,例如計算成績。 * NumPy 提供了高效的內積計算方法。 * 使用函數:`np.dot(array1, array2)`。 * 使用運算符 (較新版本):`array1 @ array2`。(課程中使用 `np.dot`) * **範例:** 計算單一學生的加權平均成績。 * 學生成績 Array 與加權權重 Array 進行內積計算。 * **範例:** 計算**多位學生**的加權平均成績。 * 將所有學生的成績組織成一個多維 Array。 * 這個多維 Array 與權重 Array 進行點積,NumPy 會自動對每一行 (每一位學生) 執行內積計算。 * 可以**一次性**計算出全班同學的成績,無需使用迴圈。 --- - [x] **對應課堂練習四:陣列導向運算:內積 (加權總和)** 1. **情境:** 計算學生分數的加權平均。有學生的分數 Array `grades = np.array()`,以及對應的權重 Array `weights = np.array([0.3, 0.4, 0.3])`。 2. **任務:** 使用 NumPy 的內積 (Dot Product) 功能計算這位學生的加權平均分數。可以使用 `np.dot()` 或 `@` 運算符 (如果您的 Python 版本支援)。印出結果。 3. **情境:** 現在有多位學生的成績。這些成績儲存在一個二維 Array 中,每一列代表一位學生的成績 (期中, 期末, 平時)。 `all_grades = np.array([, , , ])` 權重 Array 仍然是 `weights = np.array([0.3, 0.4, 0.3])`。 4. **任務:** 使用 NumPy 的內積功能,一次性計算出所有學生的加權平均分數。印出結果。解釋 NumPy 在這裡是如何進行運算的。 --- - [ ] **Array 的變形與重塑 (Reshape)** * 可以改變 Array 的維度或形狀,例如將一維 Array 變成二維矩陣。 * 查看 Array 形狀:使用 `.shape` 屬性。 * 改變 Array 形狀的方法: * 直接修改 `.shape` 屬性:`array.shape = new_shape`。**會修改原來的 Array**。 * 使用 `reshape()` 方法:`array.reshape(new_shape)`。 * `reshape()` 方法會**產生一個新的 Array**,而**不會改變原來的 Array**。若要更新原 Array,需將結果賦值回去 (`array = array.reshape(new_shape)`)。 * 改變前後的元素總數必須一致。 --- - [ ] **對應課堂練習五:Array 的變形 (Reshape)** 1. **任務:** 建立一個包含數字 1 到 12 的一維 NumPy Array (例如,可以使用 `np.arange(1, 13)`)。將其賦值給變數 `data_1d`。 2. **任務:** 查看 `data_1d` 的形狀 (shape)。 3. **任務:** 將 `data_1d` 變形 (reshape) 為一個 3x4 的二維 Array。印出變形後的 Array,並確認原來的 `data_1d` **是否**改變。 4. **任務:** 將 `data_1d` 變形為一個 4x3 的二維 Array,並將結果**賦值**回 `data_1d`。印出 `data_1d` 的內容和形狀,確認它已經被改變。 --- - [x] **Array 的索引與快篩 (Indexing & Boolean Indexing)** * Array 的基本索引 (使用中括號加索引或切片) 與 Python List 類似。 * **布林索引 (Boolean Indexing)** 是 Array 強大的資料篩選方式。 * **原理:** * 建立一個與原 Array 形狀相同的**布林 Array** (內容是 `True` 或 `False`)。 * 這個布林 Array 通常是透過對原 Array 進行條件判斷產生,例如 `array < 0`。 * 將這個布林 Array 放在原 Array 的中括號中 (`original_array[boolean_array]`)。 * NumPy 會自動選出布林 Array 中對應位置為 `True` 的所有元素。 * **範例:** 快速篩選出 Array 中所有小於 0 的數字 (`array[array < 0]`)。 * 布林索引是一種高效的資料篩選方式,無需手寫迴圈判斷。 --- - [ ] **對應課堂練習六:Array 的布林索引 (快篩)** 1. **情境:** 假設有一個 Array 包含一些數字:`numbers = np.array([3, -2, 4, -5, 33, -33, -5, -6, -10])`。 2. **任務:** 建立一個布林 Array,用於判斷 `numbers` Array 中哪些元素小於 0。印出這個布林 Array。 3. **任務:** 使用上一步生成的布林 Array 作為索引,從 `numbers` Array 中選出所有小於 0 的元素。印出篩選後的結果。 4. **任務:** 使用類似的方法,從 `numbers` Array 中選出所有大於 5 的元素。 --- - [x] **結合 NumPy 與 Matplotlib 繪圖** * Matplotlib 是常用的繪圖套件,標準匯入為 `import matplotlib.pyplot as plt`。 * 結合 NumPy 的 `np.linspace()` 生成等間距的 X 軸數據。 * 利用 Array 導向的運算,快速計算出對應的 Y 軸數據 (例如 `np.sin(x)`, `x + np.sin(x)`)。 * 使用 `plt.plot(x, y)` 即可輕鬆繪製函數圖形。 * 電腦繪製函數圖形的基本原理是**描點法**。 * show: 顯示圖形 ```python= import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2 * np.pi, 100) y = np.sin(x) plt.plot(x, y) plt.show() ``` * 可以在同一張圖上繪製多條曲線。 * 利用**布林索引**,可以只繪製函數中符合特定條件的部分 (例如只繪製 Y 值大於 0 的部分)。 --- - [x] **對應課堂練習七:結合 NumPy 與 Matplotlib 繪圖** 1. **任務:** 使用 `np.linspace()` 生成一個包含 200 個點的 Array,範圍從 -2π 到 2π。將其賦值給變數 `x_vals`。 2. **任務:** 利用 Array 導向運算,計算對應的 `np.sin(x_vals)` 值,將結果賦值給變數 `y_sin`。 3. **任務:** 使用 `plt.plot()` 函數,以 `x_vals` 為 x 軸數據,`y_sin` 為 y 軸數據,繪製 sin 函數的圖形。 4. **任務:** 在同一張圖上,計算並繪製 `np.cos(x_vals)` 的圖形。 5. **進階任務 (選作):** 嘗試使用布林索引,只繪製 `y_sin` 中值大於 0 的部分 (提示:您需要同時篩選 `x_vals` 和 `y_sin`)。 :::info 以下為`成為python數據分析達人的第一門課 4`中與dict有關的內容,此外大部分時間在演示`Jupyter Notebook 的互動功能 (Interactive Features) + Matplotlib`,也有教一點點overfitting的概念,感覺可以之後補。 ::: --- - [ ] Python 字典 (dict) - 什麼是字典? * 想像一本真正的字典:每個「字」(Key) 對應一個「解釋」(Value)。 * 在 Python 中,字典是一種用來儲存鍵值對 (key-value pairs) 的資料結構。 * 每個項目都包含一個獨一無二的鍵 (Key) 和一個對應的值 (Value)。 * 它特別適合用來組織那些有關聯性的資料,例如:學生的學號對應姓名、城市名稱對應人口數等等。 * 常用於查表、映射等用途 --- - [ ] Python 字典 (dict) - 如何建立與操作實例 * 使用大括號 {} 來建立字典。 * 鍵值對之間用冒號 : 分隔,不同項目用逗點 , 分隔。 * 值可以是任何資料型態:student_info = {'Name': '小明', 'Score': 85.5, 'IsEnrolled': True} * 取得值: 使用中括號 [] 和對應的鍵 (Key) 來取得值。 * print(myDictionary['Apple']) # 輸出: '蘋果' * 新增或修改值: 透過指定一個新的鍵並賦值來新增項目。如果鍵已存在,則修改值。 * myDictionary['orange'] = '六成' # 新增一個項目 * student_info['Score'] = 90 # 修改 Score 的值 ```python= # 查詢 print(my_dict['apple']) # 蘋果 # 新增 my_dict['orange'] = '柳橙' # 遍歷 for key in my_dict: print(key, "->", my_dict[key]) ``` --- - [ ] 課堂練習:字典操作 * 請在 Jupyter Notebook 中完成以下任務: * 建立一個字典 colors = {'red': '紅色', 'blue': '藍色'} * 新增一個顏色 'green' -> '綠色' * 印出所有英文顏色與對應中文名稱 --- - [ ] 字典 (dict) - 遍歷與格式化輸出 * 使用 for 迴圈可以遍歷字典的鍵 (Keys)。 * for key in myDictionary: * 在迴圈內,可以用 myDictionary[key] 取得對應的值。 * 結合 .format() 方法: 讓輸出的鍵值對更整齊易讀。 * print("單字: {}, 意思是: {}".format(key, myDictionary[key])) <!-- - [x] **總結與展望** * **陣列導向程式設計**是數據分析的關鍵思維:**多用 Array,少用 For 迴圈**。 * **NumPy** 及其核心資料形態 **Array** 是實現這一思維的**最重要工具**。 * 學習 **正規匯入方式** (特別是 `import package as alias`) 是良好的程式習慣。 * 養成 **Jupyter Notebook 標準起始設定**的習慣 (`matplotlib inline`, `import numpy as np`, `import matplotlib.pyplot as plt`)。 * 掌握 Array 的**生成、運算、變形和索引**是進行高效數據分析的基礎。 * 這些技能將為您打開 Python 數據分析的大門。 --> ## 課後練習題 ### 簡答題 * NumPy 套件在 Python 數據分析中的重要性是什麼? > NumPy 是 Python 在科學計算和數據分析領域最核心的套件,提供了高效處理陣列數據的功能。 * 「陣列導向」程式設計的核心概念是什麼? > 陣列導向是指多利用 Array 的整體運算來處理數據,盡量減少使用 for 迴圈,以提升程式執行效率。 * 為什麼不推薦使用 from package import * 這種方式匯入套件? > 這種匯入方式會將套件內所有指令都載入到當前命名空間,容易造成不同套件之間的指令命名衝突,增加程式碼的維護難度。 * 標準的匯入 NumPy 和 Matplotlib 繪圖模組的方式是什麼? > 標準的匯入 NumPy 方式是 import numpy as np,匯入 Matplotlib 繪圖模組的方式是 import matplotlib.pyplot as plt。 * 在進行數據分析時,建議最先執行的三行標準指令是什麼? > 建議先執行 %matplotlib inline、import numpy as np 和 import matplotlib.pyplot as plt 這三行指令。 * 相較於 Python List,NumPy Array 在批量數據計算上的優勢是什麼? > NumPy Array 支援向量化運算,可以在整個 Array 上一次性執行數學計算,比 List 使用 for 迴圈逐個元素處理要高效得多。 * 如何將一個 Python List 轉換為 NumPy Array? > 可以使用 np.array(your_list) 這個指令將一個 List 轉換為 NumPy Array。 * 什麼是 Array 的 Reshape 功能?它有什麼用途? > Array 的 Reshape 功能允許改變 Array 的維度,例如將一維 Array 轉換為多維矩陣,這在處理不同結構的數據時非常有用。 * 如何快速生成一個包含十個零的 NumPy Array? > 可以使用 np.zeros(10) 這個指令快速生成一個包含十個零的一維 Array。 * 如何利用布林陣列對 NumPy Array 進行快速篩選? > 可以將一個與原 Array 長度相同的布林陣列作為索引,放在原 Array 的中括號內,Array 會自動選出對應布林值為 True 的元素。 ## 名詞解釋 * NumPy: Python 程式語言的一個開源函式庫,專門用於進行科學計算,提供了高效的多維陣列物件(Array)以及大量的數學函數來操作這些陣列。 * Array: NumPy 的核心數據結構,是一個同質的多維陣列,所有元素的數據類型相同。與 Python 的 List 相比,Array 更適合進行數值計算和批量操作。 * 陣列導向 (Array-oriented): 一種程式設計理念,強調利用 Array 的整體運算來處理數據,而非使用迴圈對單個元素進行操作,以提高程式效率。 * for 迴圈 (For loop): Python 中用於重複執行一段程式碼的控制結構,通常用於遍歷序列(如 List)中的元素。在 Array 導向的程式設計中,盡量避免使用 for 迴圈進行數值計算。 * 套件 (Package): Python 中組織模組的方式,包含多個相關的模組和子套件,提供了更豐富的功能。 * 匯入 (Import): 將 Python 模組或套件載入到當前程式中,以便使用其中的功能。 * PiLab inline: 一個早期用於 IPython Notebook 的魔術指令,可以方便地匯入 NumPy 和 Matplotlib 等套件並在 Notebook 中直接顯示圖形,但因匯入方式較混亂而較少推薦。 * Matplotlib: Python 中一個常用的繪圖套件,用於生成各種靜態、動態和交互式圖形。 * matplotlib inline: IPython 或 Jupyter Notebook 中的一個魔術指令,用於在 Notebook 中直接顯示 Matplotlib 繪製的圖形。 * pyplot: Matplotlib 套件中的一個模組,提供了一個類似 MATLAB 的繪圖介面,通常匯入為 plt。 * 縮寫 (Alias): 在匯入套件時,為套件指定一個較短的名稱,方便在程式碼中使用。 * 向量化運算 (Vectorization): 利用 Array 的整體運算能力,一次性對 Array 中的所有元素進行數學計算或操作,效率遠高於使用迴圈逐個處理。 * Dot Product (內積): 兩個向量的內積是一個標量,計算方式為對應元素的乘積之和。在 NumPy 中可以使用 np.dot() 函數或 @ 運算符進行計算。 * Reshape: 改變 Array 的維度而不改變其數據的功能,例如將一維 Array 轉換為二維矩陣。 * np.zeros(): NumPy 函數,用於創建一個指定形狀(維度)且所有元素都為零的 Array。 * np.ones(): NumPy 函數,用於創建一個指定形狀(維度)且所有元素都為一的 Array。 * np.eye(): NumPy 函數,用於創建一個二維的單位矩陣(Identity Matrix),對角線上的元素為一,其餘為零。 * 布林陣列 (Boolean Array): 一種特殊的 Array,其元素為布林值 (True 或 False)。常用於作為索引,對其他 Array 進行篩選。 * 篩選 (Indexing/Filtering): 從 Array 中根據特定條件選擇或提取元素的過程。利用布林陣列進行篩選是 Array 的一個重要功能。 * np.linspace(): NumPy 函數,用於在指定區間內均勻生成指定數量的數字,常用於生成繪圖時的 X 軸數據點。 * np.random.rand(): NumPy 函數,用於生成介於 0 到 1 之間的隨機浮點數 Array。 * np.random.randn(): NumPy 函數,用於生成符合標準常態分佈(平均值為 0,標準差為 1)的隨機浮點數 Array。 * np.random.randint(): NumPy 函數,用於生成指定範圍內的隨機整數 Array。 # Brisk teaching v.s. Gamma ## Gamma ![image](https://hackmd.io/_uploads/BJNc-_-zex.png) ## Brisk teaching ![image](https://hackmd.io/_uploads/Sy99m_WGxx.png) - Gamma 比較注重美編,生成出來的內容比較好看 - Brisk teaching - 優點 : 可以從 youtube 直接生成教材,省略了很多步驟(影片轉文字-> 摘要 -> Notebookllm -> 審核 -> Gamma產生ppt) - 缺點 : 模板選擇較少 # QA 生成 - 以課程為例 : 成為python數據分析達人的第一門課-蔡炎龍 3-2 Python強大的秘密: numpy、向量化與各式套件 正規讀套件的方法之一 ![image](https://hackmd.io/_uploads/rkhUjuWfgl.png) ![image](https://hackmd.io/_uploads/Skgyh_ZGle.png) # 老師問題 * Brisk teaching for YouTube video https://youtu.be/4HvpgNXEqks?si=h1g6G1HYl6TJerkO * Brisk teaching for Website 網路文章 https://www.youtube.com/watch?v=uoZxtNsrQGI&t=22s * Magic School AI for 課程設計 https://youtu.be/NLOHFZu187Y?si=SmJLYGyJCui2bw2A * Magic School AI for 學生活動 https://youtu.be/QFlD80_5iPE?si=v6mdj_eZUuGGIgoR ![image](https://hackmd.io/_uploads/SJuE-FbMeg.png)

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully