numpy學習筆記 - numpy數組的常見用法

来源:https://www.cnblogs.com/dev-liu/archive/2018/08/26/numpy_basic_2.html
-Advertisement-
Play Games

# -*- coding: utf-8 -*- """ 主要記錄代碼,相關說明採用註釋形勢,供日常總結、查閱使用,不定時更新。 Created on Mon Aug 20 23:37:26 2018 @author: Dev """ import numpy as np from datetime ...


# -*- coding: utf-8 -*- """ 主要記錄代碼,相關說明採用註釋形勢,供日常總結、查閱使用,不定時更新。 Created on Mon Aug 20 23:37:26 2018   @author: Dev """   import numpy as np from datetime import datetime import random     對a,b兩個列表的相同位的元素進行運算求和:
# 純Python
def pythonSum(n):
    # 對列表迴圈計算
    a = [x for x in range(n)]
    b = [x for x in range(n)]
    c = []
    for i in range(len(a)):
        a[i] = i ** 2
        b[i] = i ** 3
        c.append(a[i] +b[i])
    return c

 

# numpy
def numpySum(n):
    # 直接對數組操作
    a = np.arange(n) ** 2
    b = np.arange(n) ** 3
    c = a + b
    return c

 

# 效率比較
size = 1000
# pythonSum()
start = datetime.now()  # 起始時間
c = pythonSum(size)
delta = datetime.now() - start  # pythonSum()的運行時間
print("The last two elements: ", c[-2:])    # 列印最後兩個元素,確認準確性
print("PythonSum elapsed time in microseconds: ", delta.microseconds)   # 以微秒為單位顯示運行時間
# pythonSum結果

The last two elements: [995007996, 998001000]
PythonSum elapsed time in microseconds: 999

  

# numpySum()
start = datetime.now()
c = numpySum(size)
delta = datetime.now() - start
print("The last two elements: ", c[-2:])
print("NumpySum elapsed time in microseconds: ", delta.microseconds)
# numpySum結果

The last two elements: [995007996 998001000]
NumpySum elapsed time in microseconds: 0

可以看出使用numpy數組的速度超快~

 

numpy數組 a = np.arange(5) print(a.dtype)     多維數組 m = np.array([np.arange(2), np.arange(2)])  # 創建一個二維數組 print(m)   # 創建元素為0的數組 zeros = np.zeros(10) zeros_2 = np.zeros((3, 6))  # 元素為0的3*6數組   # 創建元素隨機(empty)的數組 empty = np.empty((2, 3, 2))   # 訪問數組元素 a = np.array(([1, 2], [3, 4])) print(a[0, 0]) print(a[0, 1]) print(a[1, 0]) print(a[1, 1])     數組元素的數據類型 print(np.float64(42))   # float浮點型 print(np.float(True)) print(np.float(False)) print(np.int8(42.0))    # int整型 print(np.bool(42))  # Boolean布爾型 print(np.bool(0)) print(np.bool(42.0))   # 創建數組時定義元素的數據類型 print(np.arange(7, dtype=np.uint16)) print(np.arange(9, dtype=np.float64))     數據類型轉換 # 類型轉換時出現的TypeError異常 try:     print(np.int(42.0 + 1.j)) except TypeError:     print("TypeError: can't convert complex to int!")   arr = np.array([1, 2, 3, 4, 5]) print(arr.dtype)    # 元素類型 float_arr = arr.astype(np.float64) print(float_arr.dtype)   arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1]) print(arr.dtype) int_arr = arr.astype(np.int32)  # 將float64類型轉換為int32類型   # 將字元串數組轉換為字元型 numeric_string = np.array(['1.25', '-9.6', '42'], dtype=np.string_) print(numeric_string.astype(float)) # 再轉換為float類型     字元編碼 print(np.arange(7, dtype='f'))  # float32 print(np.arange(7, dtype='d'))  # float64 print(np.arange(7, dtype='D'))  # complex128 print(np.dtype(float)) print(np.dtype('f')) print(np.dtype('d')) print(np.dtype('F')) print(np.dtype('D')) print(np.dtype('f8')) print(np.dtype('float64'))   # dtype類的屬性 t = np.dtype('float64') print(t.char)   # 字元編碼 print(t.type)   # t的類型 print(t.str)     自定義數據類型 # [(欄位1, 類型, 長度), (欄位2, 類型, 長度), ...] t = np.dtype([('name', np.str_, 40), ('numitems', np.int32), ('price', np.float32)]) print(t) print(t.name) itemz = np.array([('Meaning of life DVD', 42, 100), ('Butter', 13, 2.72)])  # 按照格式生成數組     數組與標量的計算 arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr * arr)    # 對應位的元素相乘 print(arr - arr)   # 對應位的元素相減 print(1 / arr)     # 取倒數 print((arr ** 2) ** 0.5)    # 平方後開根號     一維數組的索引與切片(與列表切片用法相似) a = np.arange(9) print(a[3: 7]) print(a[:7:2])  # 從0到6,步長為2 s = slice(3, 7, 2)  # 先設定切片位置及步長,再調用 print(a[s]) print(a[::-1])  # 倒序排列1 s = slice(None, None, -1)   # 倒序排列2 print(a[s])     多維數組的切片與索引 b = np.arange(24).reshape(2, 3, 4) print(b.shape)  # 數組b的維數 # 使用索引與切片選取指定元素 print(b[0,0,0]) print(b[:,0,0]) print(b[0])         # 第一維的所有元素 print(b[0, :, :])   # 第一維的所有元素 print(b[0, ...])    # 第一維的所有元素 print(b[0,1])       # 第一維第二行 print(b[0,1,::2])   # 以2為步長 print(b[...,1])     # 兩個維的第一列 print(b[:,1])       # 兩個維的第一行 print(b[0,:,1])     # 第一維第一列 print(b[0,:,-1])    # 第一維最後一列 print(b[0,::-1, -1])    # 第一維最後一列的倒序排列 print(b[0,::2,-1])  # 第一維的第0行和第2行的最後一個元素 print(b[::-1])      # 兩個維倒序 s = slice(None, None, -1)   # 所有元素倒序排列 print(b[(s, s, s)])     布爾型索引(mask) names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe']) random.seed(200)    # 設置隨機種子 data = np.random.random((7, 4))   print(names == 'Bob')   # 生成布爾型mask print(data[names == 'Bob']) # 根據mask的值匹配data數組中的元素 print(data[names == 'Bob', 2:]) # 匹配值從第三列到最後一列的元素 print(data[names == 'Bob', 3])  # 匹配值第四列的元素   names != 'Bob' data[~(names == 'Bob')]   mask = (names == 'Bob') | (names == 'will') # 或運算符 data[mask] data[data < 0] = 0 data[names != 'Joe'] = 7   花式索引(索引亂序) arr = np.empty((8, 4)) for i in range(8):     arr[i] = i   arr[[4, 3, 0, 6]]   # 根據索引的順序取值 arr[[-3, -5, -7]] arr = np.arange(32).reshape((8, 4)) arr[[1, 5, 7, 2], [0, 3, 1, 2]] arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]] arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]     數組轉置 arr = np.arange(15).reshape((3, 5)) arr.reshape((5,3)) print(arr.T)     改變數據維度 b = np.arange(24).reshape((2, 3, 4)) print(b) print(b.ravel())    # 將多維數組將為一維 print(b.flatten()) b.shape = (6, 4) print(b) print(b.transpose()) b.resize((2, 12)) print(b)   註: flatten()與ravel()的區別 # 當修改ravel()返回的值時,會影響原數組;而flatten則不會 arr_a = np.arange(4).reshape(2, 2) arr_a.ravel()[-1] = 5 print(arr_a)    # arr_a的最後一個元素已被修改 arr_a.flatten()[0] = 10 print(arr_a)    # 不會影響原數組的第一個元素     組合數組 a = np.arange(9).reshape(3, 3) print(a) b = 2 * a print(b) # 水平組合 print(np.hstack((a, b))) print(np.concatenate((a, b), axis=1)) # 豎直組合 print(np.vstack((a, b))) print(np.concatenate((a, b), axis=0)) # 深度組合deep print(np.dstack((a, b))) # column_stack & row_stack(與hstack & vstack效果類似) oned = np.arange(2) print(oned) twice_oned = 2 * oned print(twice_oned) print(np.column_stack((oned, twice_oned))) print(np.column_stack((a, b)) == np.hstack((a, b))) print(np.row_stack((oned, twice_oned))) print(np.row_stack((a, b))) print(np.row_stack((a, b)) == np.vstack((a, b)))     數組的分割 a = np.arange(9).reshape(3, 3) print(a) # 從水平方向分成三列(跨列) print(np.hsplit(a, 3)) print(np.split(a, 3, axis=1)) # 從豎直方向分成三行(跨行) print(np.vsplit(a, 3)) print(np.split(a, 3, axis=0)) # 深度分割 c = np.arange(27).reshape(3, 3, 3) print(c) print(np.dsplit(c, 3))     數組的屬性 b = np.arange(24).reshape(2, 12) b.ndim    # 維度 b.size    # 元素個數 b.itemsize    # 單個元素的大小 b.nbytes    # 整個數組的大小(itemsize * size) # 複數 b = np.array([1.+1.j, 3.+2.j]) b.real    # 實部 b.imag    # 虛部     數組的轉換 b = np.arange(4).reshape(2, 2) b.flat    # 將數組轉換為一維數組 for i in range(len(b.flat)):    # 迴圈訪問數組元素     print(b.flat[i])   b = np.array([1.+1.j, 3.+2.j]) print(b) print(b.tolist())    # 轉換為list print(b.tostring())    # 轉換為字元 # 使用np.fromstring將字元串轉換為指定格式 print(np.fromstring(b'\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00\x00@', dtype=complex)) a_t = np.fromstring('20:42:53', sep=':', dtype=int) print(a_t) print(a_t.dtype)   # 複數轉換為整型時會捨棄虛部 print(b.astype(int)) print(b.astype('complex'))  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、jQuery中的prop()和attr()的區別 prop()是在jQuery1.6版本之後才有的,在之前一直都是使用attr(), prop()修複了attr()的一些小bug。 2、推薦用法: prop() :在HTML元素固有屬性的時候用prop() attr() : 推薦在HTML非固有 ...
  • 這是設計模式的最後一篇,最近事還是挺多,自己的東西還是沒進步。其實我這個人不用和領導套近乎,我有自己的職業素養,工匠精神。我喜歡獨處,喜歡自由,也喜歡女人,我訂婚後也很幸福。 今年我31周歲了,現在不是回想以前的時候,但是還是我應該努力的時候,不停的上進,堅持最後一定會成功!最怕傻逼式的堅持! 朋友 ...
  • 概述 面向消息的中間件(message-oriented middleware 簡稱 MOM)支持在分散式系統之間發送和接收消息的軟體或硬體基礎橋梁。MOM允許應用程式模塊分佈在各個平臺上,並減少了跨多個操作系統和網路協議的開發應用程式的複雜性。中間件創建了一個分散式通信層,將應用程式開發人員與各種 ...
  • 1、自定義類型的定義及使用 2、自定義類的記憶體圖 3、ArrayList集合的基本功能 4、隨機點名器案例及庫存案例代碼優化 ...
  • Asp.Net MVC EF之一:使用Database類在EF框架中執行Sql語句 ...
  • Flask簡介 Flask是用 Python 語言基於 Werkzeug 工具箱編寫的輕量級Web開發框架。 其 WSGI 工具箱採用 Werkzeug(路由模塊),模板引擎則使用 Jinja2。這兩個也是 Flask 框架的核心。 搭建虛擬環境(Ubuntu) 一、安裝虛擬環境命令: 二、創建虛擬 ...
  • 今日內容介紹 1、介面 2、多態 01介面的概念 A:介面的概念 介面是功能的集合,同樣可看做是一種數據類型,是比抽象類更為抽象的”類”。 介面只描述所應該具備的方法,並沒有具體實現,具體的實現由介面的 實現類(相當於介面的子類)來完成。這樣將功能的定義與實現分離,優化了程式設計。 請記住:一切事物 ...
  • 開始食用grpc(之一) 轉載請註明出處:https://www.cnblogs.com/funnyzpc/p/9501353.html ``` 記一次和一鍋們壓馬路,路過一咖啡廳(某巴克),隨口就問隨行的鍋門:你能從那咖啡廳看到什麼? 當時的那家某巴克處於鬧市,也正值周末,屋外屋內喝咖啡的人幾近乎 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...