<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
轉置可以對陣列進行重置,返回的是源資料的檢視(不會進行任何複製操作)。
轉置有三種方式,transpose
方法、T
屬性以及swapaxes
方法。
import numpy as np arr = np.arange(9).reshape((3,3))#生成一個3行3列的陣列 print arr [[0 1 2] [3 4 5] [6 7 8]] print arr.T [[0 3 6] [1 4 7] [2 5 8]]
對於高維陣列,transpose需要用到一個由軸編號組成的元組,才能進行轉置。
比如說三維的陣列,那就對維度進行編號,也就是0,1,2。這裡的0,1,2可以理解為對shape返回元組的索引。
比如
arr1 = np.arange(24).reshape(2,3,4)#生成一個2*3*4的陣列 print arr1 [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] print arr1.shape #看形狀 (2, 3, 4) #說明這是一個2*3*4的陣列(矩陣),返回的是一個元組,可以對元組進行索引,也就是0,1,2
transpose((1,0,2))
的意義在於將 (2, 3, 4)
轉成 (3, 2, 4)
,比如,數值12開始的索引是 [1,0,0]
,變換後變成了 [0,1,0]
,如下圖:
print arr1.transpose((1,0,2)) [[[ 0 1 2 3] [12 13 14 15]] [[ 4 5 6 7] [16 17 18 19]] [[ 8 9 10 11] [20 21 22 23]]]
swapaxes,它接受一對軸編號。進行軸對換。
arr1 = np.arange(24).reshape(2,3,4) print arr1 [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] print arr1.swapaxes(1,0) #將第一個軸和第二個軸交換,對比transpose(1,0,2) [[[ 0 1 2 3] [12 13 14 15]] [[ 4 5 6 7] [16 17 18 19]] [[ 8 9 10 11] [20 21 22 23]]]
arr1=np.random.random((2,3)) arr2=np.random.random((2,3)) arr3=np.random.random((3,2)) print(arr1) # 加減乘除、乘方 print(arr1*2) print() print(arr1+2) print() print(arr1-2) print() print(arr1/2) print() print(arr1**2)
# 加減乘除、乘方、陣列的矩陣積 # 兩個二維矩陣(行和列的矩陣)滿足第一個矩陣的列數與第二個矩陣的行數相同, # 那麼可以進行矩陣的乘法,即矩陣積,矩陣積不是元素級的運算。也稱為點積、數量積。 print(arr1+arr2) print() print(arr1-arr2) print() print(arr1*arr2) print() print(arr1/arr2) print() print(arr1**arr2) print() print(arr1.dot(arr3))
# 定義一個3*3*3的陣列 arr3=np.array([ [[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]] ]) # 索引 print(arr3) print("# # # # # # #arr3[0]# # # # # # # # # # # # # # ") print(arr3[0]) print("# # # # # # #arr3[1] # # # # # # # # # # # # # ") print(arr3[1]) print("# # # # # # # arr3[2] # # # # # # # # # # # # # # ") print(arr3[2]) print("# # # # # # # arr3[0][0] # # # # # # # # # # # # # # ") print(arr3[0][0]) print("# # # # # # # arr3[0][1] # # # # # # # # # # # # # # ") print(arr3[0][1]) print("# # # # # # # arr3[0][2]# # # # # # # # # # # # # # ") print(arr3[0][2]) print("# # # # # # # arr3[0][2][0] # # # # # # # # # # # # # # ") print(arr3[0][2][0]) print("# # # # # # # arr3[0][2][1]# # # # # # # # # # # # # # ") print(arr3[0][2][1]) print("# # # # # # # arr3[0][2][2]# # # # # # # # # # # # # # ") print(arr3[0][2][2]) # 切片,,,在各維度上單獨切片,如果緯度都保留,則使用冒號,不指定起始值 print("# # # # # # # arr3[0,:,0:2]# # # # # # # # # # # # # # ") print(arr3[0,:,0:2]) print("# # # # # # # arr3[1,:,0:2]# # # # # # # # # # # # # # ") print(arr3[1,:,0:2]) print("# # # # # # # arr3[2,:,0:2]# # # # # # # # # # # # # # ") print(arr3[2,:,0:2]) print("# # # # # # # arr3[:,:,0:2]# # # # # # # # # # # # # # ") print(arr3[:,:,0:2]) print("# # # # # # # arr3[:,0,0:2]# # # # # # # # # # # # # # ") print(arr3[:,0,0:2]) print("# # # # # # # arr3[:,1,0:2]# # # # # # # # # # # # # # ") print(arr3[:,1,0:2]) print("# # # # # # # arr3[:,2,0:2]# # # # # # # # # # # # # # ") print(arr3[:,2,0:2])
# 利用布林型別的陣列進行資料索引,最終返回的結果是對應索引陣列中資料為True位置的值。 # numpy中不能使用Python中and、or、not,使用&(與)、|(或)、~(非) arr6=np.random.random((3,4)) print(arr6) print("# # # # # # ## #arr6>0.5得到的布林值,為真則取該位置的值,否則就捨去 # # # # # # # # # ") # A=arr6<0.5 A=arr6>0.5 print(A) print("# # # # # # ## # # # # # #將對應的布林值轉換為一維陣列 # # # # # # # # # # # # # # ## # ") # 裝換成一維陣列 arr7=arr6[A] print(arr7) print(arr7.shape) # 利用布林值進行索引的一個應用範例 names=np.array(['Gerry','Tom','John']) scores=np.array([ [98,87,86,95], [48,84,84,45], [58,7,81,95] ]) class1=np.array(['語文','數學','英語','科學']) print("Gerry score is:",scores[names=='Gerry'].reshape((-1))) print("Gerry score is:",scores[names=='Gerry'].reshape((-1))[class1=='數學']) print("Gerry和Tom的成績") print(scores[(names=='Gerry')|(names=='Tom')]) print("非Gerry和Tom的成績") print(scores[(names!='Gerry')&(names!='Tom')]) print("成績大於90的全部輸出") print(scores[scores>90])
arr7=np.arange(40).reshape(5,8) print(arr7) print("獲取第0、3、5行的資料") print(arr7[[0,2,4]]) print("獲取第(0,0)、(3,0)、(4,2)的資料") print(arr7[[0,3,4],[0,0,2]]) print("獲取第0、3、5行的第0、2、3列資料") print(arr7[[0,3,4]].T[[0,1,2]].T) print("ix_會產生一個索引器") print(arr7[np.ix_([0,3,4],[0,1,2])]) # ndarray-花式索引:指的是利用整數陣列進行索引的方式。 arr7=np.arange(40).reshape(5,8) print(arr7) print("獲取第0、3、5行的資料") print(arr7[[0,2,4]]) print("獲取第(0,0)、(3,0)、(4,2)的資料") print(arr7[[0,3,4],[0,0,2]]) print("獲取第0、3、5行的第0、2、3列資料") print(arr7[[0,3,4]]) print("##################") print(arr7[[0,3,4]].T) print("##################") print(arr7[[0,3,4]].T[[0,1,2]]) print("##################") print(arr7[[0,3,4]].T[[0,1,2]].T) print("ix_會產生一個索引器") print(arr7[np.ix_([0,3,4],[0,1,2])])
# 陣列轉置是指將shape進行重置操作,並將其值重置為原始shape元組的倒置, # 比如原始的shape值為:(2,3,4),那麼轉置後的新元組的shape的值為: (4,3,2)f # 可以通過呼叫陣列的transpose函數或者T屬性進行陣列轉置操作 arr=np.random.random(30).reshape(3,5,2) print(arr) print("#############################################") arr1=arr.T print(arr1) print("#############################################") arr2=np.transpose(arr1) print(arr2)
numpy模組中對ndarray中資料進行快速元素級運算的函數,也可以看做是簡單的函數(接受一個或多個標量值,併產生一個或多個標量值)的向量化包裝器。主要包括一元函數和二元函數。
arr3=np.array([ [1,2,-3], [0.1,0.6,-0.4] ]) print(arr3) print("#############################################") # abs fabs計算絕對值 print(np.abs(arr3)) print("#############################################") # sqrt 計算各元素的平方根 print(np.sqrt(abs(arr3))) print("#############################################") # square計算各元素的評分:arr3**2 print(np.square(arr3)) print("#############################################") # exp計算各元素指數e的x次方 print(np.exp(arr3)) print("#############################################") # log2、log10分別計算底數為10、2的log值,以及log(1+x) print(np.log10(abs(arr3))) print(np.log2(abs(arr3))) print(np.log1p(abs(arr3))) print("#############################################") # sign計算各個元素的正負號,1:正號 0:0 -1:負號 print(np.sign(arr3)) print("#############################################") # ceil 計算各個元素的ceil值,大於等於該值的最小整數 print(np.ceil(arr3)) print("#############################################") # floor 計算各個元素的floor的值,小於等於該值的最大整數 print(np.floor(arr3)) print("#############################################") # rint 將各個元素的四書五入到最接近的整數 print(np.rint(arr3) print("#############################################") # modf 將陣列中元素的小數位和整數位以兩部分獨立陣列的形式返回 print(np.modf(arr3)) print("#############################################") # isnan 返回一個表示「那些值是NaN(不是一個數位)」的布林型別陣列 print(np.isnan(arr3)) print("#############################################") # isfinite、isinf 分別一個表示」那些元素是有窮的(非inf、非NaN)」或者「那些元素是無窮的」的布林型陣列 print(np.isfinite(arr3)) print(np.isinf(arr3)) print("#############################################") # cos、cosh、sin、sinh、tan、tanh 普通以及雙曲型三角函數 print(np.tan(arr3)) print("#############################################") # arccos、arccosh、arcsin、arcsinh、arctan、arctanh 反三角函數 print(np.arctan(arr3))
arr4=np.array([ [1,0,-3], [0.1,0.6,-0.4] ]) arr5=np.array([ [2,-5,8], [-0.1,-0.6,0.4], ]) arr6=np.array([ [2,-5,8], [-0.1,-0.6,0.4], [-0.1,-0.6,0.4] ]) print("#############################################") # mod 取模運算,做除法運算之後的餘數 print(np.mod(arr4,arr5)) print("#############################################") # dot 求兩個陣列的點積 print(np.dot(arr4,arr6)) print("#############################################") # greater(大於)、greater_equal(大於等於)、less(小於)、less_equal(小於等於)、equal(等於)、not_equal(不等於) # 執行元素級別的比較運算,最終返回一個布林型陣列 print(np.greater(arr4,arr5)) print("#############################################") # logical_and、logical_or、logical_xor # 執行元素級別的布林運算運算,相當於中綴運運算元&、|、^ print(np.logical_and(arr4,arr5)) print(np.logical_xor(arr4,arr5)) print("#############################################") # power 求解對陣列中的每個元素進行給定次數的指數值,類似於: arr ** 3 print(np.power(arr3,4))
聚合函數是對一組值(eg一個陣列)進行操作,返回一個單一值作為結果的函數。
當然聚合函數也可以指定對某個具體的軸進行資料聚合操作;
#常將的聚合操作有:平均值mean、最大值max、最小值min、方差std等等 arr7=np.array([ [2,-5,8], [-0.1,-0.6,0.4], [-0.1,-0.6,0.4] ]) print(np.mean(arr7)) print(np.max(arr7)) print(np.min(arr7)) print(np.std(arr7))
# np.where函數是三元表示式x if condition else y的向量化版本 arr8=np.array([2,7,8]) arr9=np.array([-0.1,-0.6,0.4]) condition=arr8>arr result=np.where(condition,arr8,arr9) print(result)
# np.unique函數的主要作用是將陣列中的元素進行去重操作(也就是隻儲存不重複的資料) arr10=np.array(["Python","Python","java"]) print(arr10) print(np.unique(arr10))
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45