關(guān)于numpy數(shù)組中元素單個(gè)選取或部分選取問題
numpy數(shù)組中元素單個(gè)選取或部分選取
一維數(shù)組中選擇部分元素輸出,即數(shù)組名【【下標(biāo)】】,是兩個(gè)中括號!
二維數(shù)組選取一個(gè)元素,即數(shù)組名【行,列】,行列是從0開始的。
行列可以省略,行和列全部省略時(shí),輸出整個(gè)數(shù)組。
行省略,代表輸出所有行;列省略,代表輸出所有列。
可以指定輸出某幾行、某幾列,即數(shù)組名【1:3,1:4】,輸出1到2行且1到3列的所有元素,即輸出二維數(shù)組。
import numpy as np ans = np.array([1,2,3,4,5,6,7,8,9]) ? ?#一維數(shù)組 a = np.array([1,2,3,4,5,6,7]) ? ?#一維數(shù)組 b = np.array([[1,2,3],[4,5,6],[7,8,9]]) ? ?#二維數(shù)組 #獲取指定位置的元素 print(ans[[2,3,5]]) ? ? ?#即為輸出ans數(shù)組中下標(biāo)為2,3,5的元素 print(b[1,2]) ? ?#輸出1行2列的元素,這里的行和列是從0開始的 print(b[1,:]) ? ?#輸出1行的所有元素,“:”就代表著輸出所有元素 print(b[:,2]) ? ?#輸出2列的所有元素 print(b[1:3,0:3]) ? ?#1到2行,0到2列的元素,“端點(diǎn)左閉右開”
numpy數(shù)組操作
引言
- python中用list保存一組值,可以用來作為數(shù)組使用,由于列表的元素可以是任何對象,英雌列表中所保存的是對象的指針,為了保存一個(gè)簡單的[1,2,3],需要三個(gè)指正和三個(gè)整數(shù)對象,對于數(shù)值運(yùn)算來說這種結(jié)果顯然比較浪費(fèi)你內(nèi)存和CPU計(jì)算時(shí)間
- 此外python還提供了一個(gè)array模塊,array對象和列表不同,他直接保存數(shù)值,呵呵C語言的一位數(shù)據(jù)比較類似,但是由于它不支持多維,也沒有各種運(yùn)算函數(shù),因此也不適合做數(shù)值運(yùn)算
- numpy的誕生彌補(bǔ)了這些不足,numpy提供了ndarray對象:是存儲單一數(shù)據(jù)類型的多維數(shù)組
numpy是高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包,支持為讀書族與矩陣運(yùn)算包括:
- 一個(gè)強(qiáng)大的n為數(shù)組對象ndarray,具有適量算數(shù)運(yùn)算和復(fù)雜廣播能力的快速且節(jié)省時(shí)間的多維數(shù)組。
- 用于對整組數(shù)據(jù)進(jìn)行快速運(yùn)算的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)
- 對于讀寫磁盤數(shù)據(jù)的工具以及用于操作內(nèi)存映射文件的工具
- 線性代數(shù),隨機(jī)數(shù)生成以及傅里葉變換等功能
ndarray
- N維數(shù)組對象ndarray是用于存放同類型元素的多維數(shù)組
- ndarray中的每個(gè)元素在內(nèi)存中都有相容存儲大小的區(qū)域
- ndarray中的每個(gè)元素是數(shù)據(jù)類型對象的對象簡稱dtype
- 可以對數(shù)組進(jìn)行索引和切片
- 可以通過ndarray的方法和屬性來訪問和修改ndarray的內(nèi)容
創(chuàng)建nadrray:創(chuàng)建數(shù)組最簡單的辦法就是使用array函數(shù),它接受一切序列型的對象,然后產(chǎn)生一個(gè)含有傳入數(shù)據(jù)的numpy數(shù)組,其中嵌套序列(等長列表組成的列表)將會被轉(zhuǎn)化為一個(gè)多維數(shù)組
numpy.array(obkject, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object 數(shù)組或嵌套的數(shù)列
dtype 數(shù)組元素的數(shù)據(jù)類型 可選
copy 對象是否需要復(fù)制
order 創(chuàng)建數(shù)組的樣式,c為行方向,F(xiàn)為列方向,A為任意方向
subok 默認(rèn)返回一個(gè)與基類類型一致的數(shù)組
ndmin 指定生成數(shù)組的最小維度
import numpy as np a = [1,2,3,4] b = np.array(a) print(b) >>> array([1,2,3,4]) c = np.array([[1,2],[3,4]]) print(c) >>>>[[1,2] [3,4]]
除了np.array之外,還有一些函數(shù)也可以新建數(shù)組:
- zrrors和ones分別可以創(chuàng)建指定長度或者形狀的全0或1數(shù)組
- empty可以創(chuàng)建一個(gè)沒有任何具體值的數(shù)組
np.zeros(3) # 全0數(shù)組 np.ones(3) # 全1數(shù)組 np.zeros((3,3)) #全0二維數(shù)組 三行三列 np.zeros((3,1)) # 0二維數(shù)組 三行一列 np.zeros((1,3)) np.ones((3,3)) np.identity(3) #單位矩陣,三行三列
ndarray之創(chuàng)建數(shù)組
創(chuàng)建隨機(jī)數(shù)
均勻分布
- np.random.rand(10,10) 創(chuàng)建指定形狀(示例為10行10列)的數(shù)組(范圍在0-1之間)
- np.random.uniform(0,100) 創(chuàng)建指定范圍內(nèi)的一個(gè)數(shù)
- np.random.randint(0,100) 創(chuàng)建指定范圍內(nèi)的整數(shù)
正態(tài)分布
- np.random.normal(1.75,0.1,(2,3)) 給定均值/標(biāo)準(zhǔn)差/維度的正態(tài)分布
創(chuàng)建隨機(jī)數(shù)組
np.random.randint(0,50,5) # 隨機(jī)數(shù)組,5個(gè)0-50之間的數(shù)字 np.random.randint(0,50,(3,5)) #3行5列 供15個(gè)隨機(jī)數(shù),都在0-50之間 np.random.rand(10) #10個(gè)結(jié)余[0,1)之間的隨機(jī)數(shù) np.random.standard_noraml(5) #從標(biāo)準(zhǔn)正太分部中隨機(jī)采樣5個(gè)數(shù)字
ndarray的數(shù)組屬性
用法 | 說明 |
---|---|
b.size | 數(shù)組元素個(gè)數(shù) |
b.shape | 數(shù)組形狀 |
b.ndim | 數(shù)組維度 |
b.dtype | 數(shù)組元素類型 |
b.ltemsize | 數(shù)組元素字節(jié)大小 |
b.reshape()可以更改形狀(3,2)變(2,3)或者其他
數(shù)組和標(biāo)量之間的運(yùn)算
數(shù)組很重要,因?yàn)樗梢允俏覀儾挥镁帉懷h(huán)即可對數(shù)據(jù)執(zhí)行批量運(yùn)算,這通常叫做矢量化,大小相同的數(shù)組之間的任何算數(shù)運(yùn)算都會將運(yùn)算應(yīng)用到元素級,同樣,數(shù)組與標(biāo)量的算數(shù)運(yùn)算也會將那個(gè)表兩只傳播到各個(gè)元素
arr = np.array([[1.,2.,3.],[4.,5.,6.]]) print(arr) >>>array([[1., 2., 3.], [4., 5., 6.]]) print(1/array) >>>array([[1. , 0.5 , 0.33333333], [0.25 , 0.2 , 0.16666667]]) print(arr-arr) >>>array([[0., 0., 0.], [0., 0., 0.]]) print(arr*arr) >>>array([[ 1., 4., 9.], [16., 25., 36.]]) print(arr*0.5) >>>array([[0.5, 1. , 1.5], [2. , 2.5, 3. ]])
基本的索引和切片
- 選取數(shù)據(jù)子集或單個(gè)元素的方式很多
- 以為數(shù)組很簡單,從表面上看,他們跟python列表差不多
- 一位數(shù)組跟列表最重要的區(qū)別在于,數(shù)組切片是原始數(shù)據(jù)的視圖,這意味著數(shù)據(jù)不會被復(fù)制,數(shù)組視圖上任何修改都會直接反應(yīng)到原始數(shù)組上
- 將一個(gè)表兩只賦值給一個(gè)切片是,該值會自動(dòng)傳播到整個(gè)選取
arr = np.arange(10) print(arr[5]) >>>5 print(arr[5:8]) >>>array([5,6,7]) print(arr[5:8]=12) >>>array([0,1,2,3,4,12,12,12,8,9]) arr_slice = arr[5:8] arr_slice[1] = 12345 print(arr) >>>array([0,1,2,3,4,12,12345,12,8,9]) arr_slice[:] = 64 print(arr) >>>array([0,1,2,3,4,64,64,64,8,9])
- 在二維數(shù)組中,個(gè)所有位置上的元素不再是標(biāo)量,而是一維數(shù)組
- 可以對個(gè)元素進(jìn)行遞歸訪問,但這樣有點(diǎn)麻煩
- 傳入一個(gè)以逗號隔開的所有列表來選取單個(gè)元素
- 在多維數(shù)組中,如果省略了后面的索引,則返回對象會使一個(gè)維度低一點(diǎn)的ndarray
arr3d = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) print(arr3d) >>>array([[[ 1, 2, 3], [ 4, 5, 6]], [[ 7, 8, 9], [10, 11, 12]]]) print(arr3d[0]) >>>array([[1, 2, 3], [4, 5, 6]]) print(arr3d[0][1]) >>>array([4, 5, 6])
數(shù)學(xué)和統(tǒng)計(jì)方法
可以通過數(shù)組上的一組數(shù)學(xué)函數(shù)對整個(gè) 數(shù)組或者某個(gè)軸向的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算
方法 | 說明 |
---|---|
sum | 對數(shù)組中全部或軸向元素求和。零長度的數(shù)組的sum為0 |
mean | 算數(shù)平均數(shù),零長度的數(shù)組的mean為NAN |
std,var | 分別為標(biāo)準(zhǔn)差和方差,自由度可調(diào)(默認(rèn)為n) |
min,max | 最小值和最大值 |
argmin,argmax | 分別為最小值和最大值的索引 |
cumsum | 所有元素的累加 |
cumprod | 所有元素的累積 |
arr = np.random.randn(5,4) #5行4列的正太分部的數(shù)據(jù) print(arr.mean()) #這個(gè)值和下面方法的值相同 print(np.mean(arr)) print(arr.sum())
值得注意的是:
mean和sum這類的函數(shù)可以接受一個(gè)axis參數(shù)(用于計(jì)算該軸向上的統(tǒng)計(jì)值)
arr.mean(axis=1) arr.sum(0)
cumsum:按照所給定的周參數(shù)返回元素的梯形累積和,axis=0,按照行累加。axis=1,按照列累加
cumprod:按照所給定的周參數(shù)返回元素的梯形累積乘積,axis=0,按照行累積,axis=1按照列累積
arr = np.array([[0,1,2],[3,4,5],[6,7,8]]) arr.cumsum(0) >>>array([[ 0, 1, 2], [ 3, 5, 7], [ 9, 12, 15]], dtype=int32) arr.cumprod(1) >>>array([[ 0, 0, 0], [ 3, 12, 60], [ 6, 42, 336]], dtype=int32)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python二維鍵值數(shù)組生成轉(zhuǎn)json的例子
今天小編就為大家分享一篇python二維鍵值數(shù)組生成轉(zhuǎn)json的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Django + Uwsgi + Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署的方法
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比較常見的一種方式。這篇文章主要介紹了Django + Uwsgi + Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署,感興趣的小伙伴們可以參考一下2018-06-06Python爬蟲如何應(yīng)對Cloudflare郵箱加密
這篇文章主要介紹了Python爬蟲如何應(yīng)對Cloudflare郵箱加密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06python基礎(chǔ)學(xué)習(xí)之如何對元組各個(gè)元素進(jìn)行命名詳解
python的元祖和列表類似,不同之處在于元祖的元素不能修改,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)學(xué)習(xí)之如何對元組各個(gè)元素進(jìn)行命名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07Python網(wǎng)頁正文轉(zhuǎn)換語音文件的操作方法
這篇文章主要介紹了Python網(wǎng)頁正文轉(zhuǎn)換語音文件的操作方法,需要的朋友可以參考下2018-12-12淺析python3中的os.path.dirname(__file__)的使用
這篇文章主要介紹了python3中的os.path.dirname(__file__)的使用,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08