初探numpy——廣播和數組操作函數

来源:https://www.cnblogs.com/LRainner/archive/2020/07/01/13220977.html
-Advertisement-
Play Games

numpy廣播(Broadcast) 若數組a,b形狀相同,即a.shape==b.shape,那麼a+b,a*b的結果就是對應數位的運算 import numpy as np a=np.array([[1,2,3],[4,5,6]]) b=np.array([[1,4,7],[2,5,8]]) p ...


numpy廣播(Broadcast)

若數組a,b形狀相同,即a.shape==b.shape,那麼a+b,a*b的結果就是對應數位的運算

import numpy as np

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

print(a+b,'\n')
print(a*b)
[[ 2  6 10]
 [ 6 10 14]] 

[[ 1  8 21]
 [ 8 25 48]]

若兩個數組形狀不同,且有一個數組維度為1,則會觸發廣播機制

a=np.array([[1,2,3],[4,5,6]])
b=np.array([1,2,3])

# 等同於np.array([[1,2,3],[4,5,6]])與np.array([1,2,3],[1,2,3])運算
print(a+b,'\n')
print(a*b)
[[2 4 6]
 [5 7 9]] 

[[ 1  4  9]
 [ 4 10 18]]

numpy數組操作函數

修改數組形狀

numpy.reshape()

不改變數據的情況下修改形狀

numpy.reshape(array , newshape , order = 'C')
參數 描述
array 要修改形狀的數組
newshape 整數或整數數組,新的形狀應該相容原有形狀
order 'C'——按行,'F'——按列,'A'——原順序,'K'——元素咋記憶體中出現的順序
import numpy as np

a_array=np.arange(16)
print(a_array,'\n')

b_array=np.reshape(a_array,[4,4])
print(b_array,'\n')

# 也可以打點調用
c_array=a_array.reshape([2,8])
print(c_array)
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15] 

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]] 

[[ 0  1  2  3  4  5  6  7]
 [ 8  9 10 11 12 13 14 15]]

numpy.ndarray.flat

numpy.ndarray.flat為數組元素迭代器

array=np.arange(9).reshape([3,3])
print(array,'\n')

# 按行遍曆數組
for row in array:
    print(row)
    
# 使用數組元素迭代器
for element in array.flat:
    print(element)
[[0 1 2]
 [3 4 5]
 [6 7 8]] 

[0 1 2]
[3 4 5]
[6 7 8]
0
1
2
3
4
5
6
7
8

numpy.ndarray.flatten和numpy.ravel

  • numpy扁平化函數
  • numpy.ndarray.flatten返回一份數組拷貝,對拷貝內容的修改不影響原始數值;
  • numpy.ravel返回一個數組的視圖,修改視圖時會影響原始數組
numpy.ndarray.flatten(order = 'C')
numpy.ravel(order = 'C')
參數 描述
order 'C'——按行,'F'——按列,'A'——原順序,'K'——元素咋記憶體中出現的順序
array=np.arange(16).reshape([4,4])
print(array,'\n')

print(array.flatten(),'\n')
print(array.ravel())
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]] 

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15] 

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
a_array=np.arange(16).reshape([4,4])
print(a_array,'\n')

#創建和a_array同樣的數組b_array
b_array=a_array.copy()

c_array=a_array.ravel()
d_array=array.flatten()

print('c_array:')
print(c_array)
print('d_array:')
print(d_array,'\n')

c_array[1]=100
d_array[1]=100

print('a_array:')
print(a_array)
print('b_array:')
print(b_array,'\n')
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]] 

c_array:
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
d_array:
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15] 

a_array:
[[  0 100   2   3]
 [  4   5   6   7]
 [  8   9  10  11]
 [ 12  13  14  15]]
b_array:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]] 

翻轉數組

transpose和ndarray.T

  • numpy數組轉置函數
a_array=np.arange(16).reshape([4,4])
print('a_array:\n',a_array)

print('使用transpose後:')
print(np.transpose(a_array))
print('使用.T轉置後:')
print(a_array.T)
a_array:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
使用transpose後:
[[ 0  4  8 12]
 [ 1  5  9 13]
 [ 2  6 10 14]
 [ 3  7 11 15]]
使用.T轉置後:
[[ 0  4  8 12]
 [ 1  5  9 13]
 [ 2  6 10 14]
 [ 3  7 11 15]]

numpy.swapaxes

  • numpy用於交換數組兩個軸的函數
numpy.swapaxes(arr , axis1, axis2)
參數 描述
arr 輸入數組
axis1 對應數組第一個軸
axis2 對應數組第二個軸
array=np.arange(8).reshape(2,2,2)
print(array)

# 交換第零個軸和第二個軸
print(np.swapaxes(array,0,2))
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]
[[[0 4]
  [2 6]]

 [[1 5]
  [3 7]]]
(0)000->(0)000 (1)001->(4)100
(2)010->(2)010 (3)011->(6)110
(4)100->(1)001 (5)101->(5)101
(6)110->(3)011 (7)111->(7)111

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 可視化新建項目 打開可視化面板 vue ui 創建項目 可以保存為預設,下次使用此預設時就不需要再次配置了 創建完成後我們可以看到他的文件結構 vue3初體驗 入口文件在public中,不在根目錄 配置全局變數 根目錄新建vue.config.js // Vue.config.js 配置選項 mod ...
  • 命令行輸入vue ui沒反應 輸入vue -h 查看幫助文檔,看是否有 ui這個使用說明,發現沒有,那就應該是版本太低了 升級腳手架 cnpm i -g @vue/cli 接下來再測試 vue -h 接下來再使用vue ui 看是否能成功打開 vue ui ok 成功打開 本文由博客一文多發平臺 O ...
  • # import requests,re,json# # 定義一個函數用來請求噹噹網的網頁信息# def request_dangdang(url):# try:# # 使用get請求# response = requests.get(url)# # 判斷返回的狀態碼是否為200# if respo ...
  • Redis限流的實現方式有3種,分別是:1、基於Redis的setnx的操作,給指定的key設置了過期實踐;2、基於Redis的數據結構zset,將請求打造成一個zset數組;3、基於Redis的令牌桶演算法,輸出速率大於輸入速率,就要限流。 第一種:基於Redis的setnx的操作 我們在使用Red ...
  • 本篇主要是根據AnalyticDB的論文,來討論AnalyticDB出現的背景,各個模塊的設計,一些特性的解析。可能還會在一些點上還會穿插一些與當前業界開源實現的比對,希望能夠有一個更加深入的探討。OK,那我們開始吧。 AnalyticDB介紹與背景 要說AnalyticDB,那起碼得知道它是乾什麼 ...
  • 前言 日常的開發中,無不都是使用資料庫來進行數據的存儲,由於一般的系統任務中通常不會存在高併發的情況,所以這樣看起來並沒有什麼問題。 一旦涉及大數據量的需求,如一些商品搶購的情景,或者主頁訪問量瞬間較大的時候,單一使用資料庫來保存數據的系統會因為面向磁碟,磁碟讀/寫速度問題有嚴重的性能弊端,詳細的磁 ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 現如今瀏覽器可謂是五花八門,火狐、UC、360、QQ 這些瀏覽器不論美觀還是所謂的安全方面都做的很符合我們需求。但如果你的工作與 IT 掛鉤,無疑 Chrome 將是很多朋友 ...
  • 一.通過console.log輸出(我最喜歡的) 1.js腳本 1.js var arguments = process.argv.splice(2); //獲得入參 var a= arguments[0]; 取第一個 console.log(a) //輸出 2.python腳本 test_1.py ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...