久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

NumPy基礎(chǔ)教程(三)高級(jí)屬性

 網(wǎng)摘文苑 2022-11-27 發(fā)布于新疆

#頭條創(chuàng)作挑戰(zhàn)賽#

NumPy 切片和索引

ndarray對(duì)象的內(nèi)容可以通過(guò)索引或切片來(lái)訪問(wèn)和修改,,與 Python 中 list 的切片操作一樣。

ndarray 數(shù)組可以基于 0 - n 的下標(biāo)進(jìn)行索引,,切片對(duì)象可以通過(guò)內(nèi)置的 slice 函數(shù),并設(shè)置 start, stop 及 step 參數(shù)進(jìn)行,,從原數(shù)組中切割出一個(gè)新數(shù)組,。

import numpy as npa = np.arange(10)s = slice(2,7,2) # 從索引 2 開(kāi)始到索引 7 停止,,間隔為2print(a[s])# 我們也可以通過(guò)冒號(hào)分隔切片參數(shù) start:stop:step 來(lái)進(jìn)行切片操作:b = a[2:7:2] # 從索引 2 開(kāi)始到索引 7 停止,間隔為 2print(b)
[2 4 6][2 4 6]

NumPy 高級(jí)索引

NumPy 比一般的 Python 序列提供更多的索引方式,。

除了之前看到的用整數(shù)和切片的索引外,,數(shù)組可以由整數(shù)數(shù)組索引、布爾索引

及花式索引,。

整數(shù)數(shù)組索引

以下實(shí)例獲取數(shù)組中 (0,0),,(1,1) 和 (2,0) 位置處的元素。

import numpy as npx = np.array([[1,2],[3,4],[5,6]])y = x[[0,1,2],[0,1,0]]print(y)
[1 4 5]

布爾索引

我們可以通過(guò)一個(gè)布爾數(shù)組來(lái)索引目標(biāo)數(shù)組,。

布爾索引通過(guò)布爾運(yùn)算(如:比較運(yùn)算符)來(lái)獲取符合指定條件的元素的數(shù)組,。

以下實(shí)例獲取大于 5 的元素:

import numpy as npx = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print ('我們的數(shù)組是:')print (x)print ('\n')# 現(xiàn)在我們會(huì)打印出大于 5 的元素 print ('大于 5 的元素是:')print (x[x > 5])
我們的數(shù)組是:[[ 0  1  2] [ 3  4  5] [ 6  7  8] [ 9 10 11]]大于 5 的元素是:[ 6  7  8  9 10 11]

花式索引

花式索引指的是利用整數(shù)數(shù)組進(jìn)行索引。

花式索引根據(jù)索引數(shù)組的值作為目標(biāo)數(shù)組的某個(gè)軸的下標(biāo)來(lái)取值,。

對(duì)于使用一維整型數(shù)組作為索引,,如果目標(biāo)是一維數(shù)組,那么索引的結(jié)果就是對(duì)應(yīng)位置的元素,,如果目標(biāo)是二維數(shù)組,,那么就是對(duì)應(yīng)下標(biāo)的行。

花式索引跟切片不一樣,,它總是將數(shù)據(jù)復(fù)制到新數(shù)組中,。

一維數(shù)組

一維數(shù)組只有一個(gè)軸 axis = 0,所以一維數(shù)組就在 axis = 0 這個(gè)軸上取值:

import numpy as npx = np.arange(9)print(x) # 一維數(shù)組讀取指定下標(biāo)對(duì)應(yīng)的元素print('-------讀取下標(biāo)對(duì)應(yīng)的元素-------')x2 = x[[0, 6]] # 使用花式索引print(x2)print(x2[0])
[0 1 2 3 4 5 6 7 8]-------讀取下標(biāo)對(duì)應(yīng)的元素-------[0 6]0

二維數(shù)組

傳入順序索引數(shù)組

import numpy as npx=np.arange(32).reshape((8,4))print(x) # 二維數(shù)組讀取指定下標(biāo)對(duì)應(yīng)的行print('-------讀取下標(biāo)對(duì)應(yīng)的行-------')print (x[[4,2,1,7]])
[[ 0  1  2  3] [ 4  5  6  7] [ 8  9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]]-------讀取下標(biāo)對(duì)應(yīng)的行-------[[16 17 18 19] [ 8  9 10 11] [ 4  5  6  7] [28 29 30 31]]

NumPy 廣播(Broadcast)

廣播(Broadcast)是 numpy 對(duì)不同形狀(shape)的數(shù)組進(jìn)行數(shù)值計(jì)算的方式,, 對(duì)數(shù)組的算術(shù)運(yùn)算通常在相應(yīng)的元素上進(jìn)行,。

如果兩個(gè)數(shù)組 a 和 b 形狀相同,即滿足 a.shape == b.shape,,那么 a*b 的結(jié)果就是 a 與 b 數(shù)組對(duì)應(yīng)位相乘,。這要求維數(shù)相同,且各維度的長(zhǎng)度相同,。

import numpy as np a = np.array([1,2,3,4]) b = np.array([10,20,30,40]) c = a * b print (c)
[ 10  40  90 160]
當(dāng)運(yùn)算中的 2 個(gè)數(shù)組的形狀不同時(shí),,numpy 將自動(dòng)觸發(fā)廣播機(jī)制。
import numpy as np a = np.array([[ 0, 0, 0],[10,10,10],[20,20,20],[30,30,30]])b = np.array([0,1,2])print(a + b)
[[ 0 1 2] [10 11 12] [20 21 22] [30 31 32]]

下面的圖片展示了數(shù)組 b 如何通過(guò)廣播來(lái)與數(shù)組 a 兼容,。

NumPy基礎(chǔ)教程(三)高級(jí)屬性

4x3 的二維數(shù)組與長(zhǎng)為 3 的一維數(shù)組相加,,等效于把數(shù)組 b 在二維上重復(fù) 4 次再運(yùn)算:

import numpy as np a = np.array([[ 0, 0, 0],[10,10,10],[20,20,20],[30,30,30]])b = np.array([1,2,3])bb = np.tile(b, (4, 1))  # 重復(fù) b 的各個(gè)維度print(a + bb)
[[ 1 2 3] [11 12 13] [21 22 23] [31 32 33]]

廣播的規(guī)則:

  • 讓所有輸入數(shù)組都向其中形狀最長(zhǎng)的數(shù)組看齊,形狀中不足的部分都通過(guò)在前面加 1 補(bǔ)齊,。
  • 輸出數(shù)組的形狀是輸入數(shù)組形狀的各個(gè)維度上的最大值,。
  • 如果輸入數(shù)組的某個(gè)維度和輸出數(shù)組的對(duì)應(yīng)維度的長(zhǎng)度相同或者其長(zhǎng)度為 1 時(shí),這個(gè)數(shù)組能夠用來(lái)計(jì)算,,否則出錯(cuò),。
  • 當(dāng)輸入數(shù)組的某個(gè)維度的長(zhǎng)度為 1 時(shí),沿著此維度運(yùn)算時(shí)都用此維度上的第一組值。

簡(jiǎn)單理解:對(duì)兩個(gè)數(shù)組,,分別比較他們的每一個(gè)維度(若其中一個(gè)數(shù)組沒(méi)有當(dāng)前維度則忽略),,滿足:

  • 數(shù)組擁有相同形狀。
  • 當(dāng)前維度的值相等,。
  • 當(dāng)前維度的值有一個(gè)是 1,。 若條件不滿足,拋出 'ValueError: frames are not aligned' 異常,。

NumPy 迭代數(shù)組

NumPy 迭代器對(duì)象 numpy.nditer 提供了一種靈活訪問(wèn)一個(gè)或者多個(gè)數(shù)組元素的方式,。

迭代器最基本的任務(wù)的可以完成對(duì)數(shù)組元素的訪問(wèn)。

接下來(lái)我們使用 arange() 函數(shù)創(chuàng)建一個(gè) 2X3 數(shù)組,,并使用 nditer 對(duì)它進(jìn)行迭代,。

import numpy as npa = np.arange(6).reshape(2,3)print ('原始數(shù)組是:')print (a)print ('\n')print ('迭代輸出元素:')for x in np.nditer(a): print (x, end=', ' ) print ('\n')
原始數(shù)組是:[[0 1 2] [3 4 5]]迭代輸出元素:0, 1, 2, 3, 4, 5,

控制遍歷順序

  • for x in np.nditer(a, order='F'):Fortran order,即是列序優(yōu)先,;
  • for x in np.nditer(a.T, order='C'):C order,,即是行序優(yōu)先;

In [13]:

import numpy as npa = np.arange(0,60,5)a = a.reshape(3,4)print ('原始數(shù)組是:') print (a) brprint ('\n') print ('原始數(shù)組的轉(zhuǎn)置是:') b = a.T print (b) print ('\n') print ('以 C 風(fēng)格順序排序:') c = b.copy(order='C')  print (c)for x in np.nditer(c):   print (x, end=', ' )print  ('\n') print  ('以 F 風(fēng)格順序排序:')c = b.copy(order='F')  print (c)for x in np.nditer(c):  print (x, end=', ' )
原始數(shù)組是:[[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]原始數(shù)組的轉(zhuǎn)置是:[[ 0 20 40] [ 5 25 45] [10 30 50] [15 35 55]]以 C 風(fēng)格順序排序:[[ 0 20 40] [ 5 25 45] [10 30 50] [15 35 55]]0, 20, 40, 5, 25, 45, 10, 30, 50, 15, 35, 55, F 風(fēng)格順序排序:[[ 0 20 40] [ 5 25 45] [10 30 50] [15 35 55]]0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55,

修改數(shù)組中元素的值

nditer 對(duì)象有另一個(gè)可選參數(shù) op_flags,。 默認(rèn)情況下,,nditer 將視待迭代遍歷的數(shù)組為只讀對(duì)象(read-only),為了在遍歷數(shù)組的同時(shí),,實(shí)現(xiàn)對(duì)數(shù)組元素值得修改,,必須指定 read-write 或者 read-only 的模式。

import numpy as npa = np.arange(0,60,5) a = a.reshape(3,4)  print ('原始數(shù)組是:')print (a)print ('\n')for x in np.nditer(a, op_flags=['readwrite']):   x[...]=2*x print ('修改后的數(shù)組是:')print (a)
原始數(shù)組是:[[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]修改后的數(shù)組是:[[ 0 10 20 30] [ 40 50 60 70] [ 80 90 100 110]]

使用外部循環(huán)

import numpy as np a = np.arange(0,60,5) a = a.reshape(3,4)  print ('原始數(shù)組是:')print (a)print ('\n')print ('修改后的數(shù)組是:')for x in np.nditer(a, flags =  ['external_loop'], order =  'F'):  print (x, end=', ' )
原始數(shù)組是:[[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]修改后的數(shù)組是:[ 0 20 40], [ 5 25 45], [10 30 50], [15 35 55],

廣播迭代

如果兩個(gè)數(shù)組是可廣播的,,nditer 組合對(duì)象能夠同時(shí)迭代它們,。 假設(shè)數(shù)組 a 的維度為 3X4,數(shù)組 b 的維度為 1X4 ,,則使用以下迭代器(數(shù)組 b 被廣播到 a 的大?。?/span>

import numpy as np a = np.arange(0,60,5) a = a.reshape(3,4)  print  ('第一個(gè)數(shù)組為:')print (a)brprint  ('\n')print ('第二個(gè)數(shù)組為:')b = np.array([1,  2,  3,  4], dtype =  int)  print (b)print ('\n')print ('修改后的數(shù)組為:')for x,y in np.nditer([a,b]):  print ('%d:%d'  %  (x,y), end=', ' )
第一個(gè)數(shù)組為:[[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]第二個(gè)數(shù)組為:[1 2 3 4]修改后的數(shù)組為:0:1, 5:2, 10:3, 15:4, 20:1, 25:2, 30:3, 35:4, 40:1, 45:2, 50:3, 55:4,

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多