numpy的基礎


詳細內容情查看numpy官方中文文檔,Numpy中文文檔
實例化對象:ndarray = np.——
ndarray的常用屬性:ndim(查看對象有幾個軸)、shape(查看對象有幾個數組,每個數組內有多少個元素)、size(查看對象內的元素個數)、dtype(查看對象內數據元素的類型)、itemsize(查看對象內數據元素的字節)
創建數組:
1> ndarray.array([ [],[],…… ]):創建數組需滿足一定的格式[ [],[],…… ],在[]內填寫數據,一個[]代表一個維度(軸) (如果:軸內的元素數量不匹配會報錯
isibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
[4,5] ]) )
另外,在添加數據之后可以手動定義數據的類型,如dtype = int32(int64|int16),其中16、32、64決定了位寬,數值越大其分配的內存越大(dtype = complex 定義為復數形式),如果沒有加次參數默認根據元素數值決定

2> ndarray.arange(a,b,c)、ndarray.linspace(a,b,d):a、b為數組的起始和末尾元素,其區別在於arange不包括最后一個元素,而linspace包括最后一個元素。c為步長,即間隔(也可理解為等差數列的公差),d為元素的數量,然后根據元素數量決定數組內的數值,其本質也是一個等差數列。
論其兩者的區別兩點:一是當arange的步長為小數時會出現精度失誤的現象;二是默認元素數據類型arange為int、linspace為float。

Data = np.linspace(1,10,num=20)   #生成一個等差數列,num=規定等差數列長度,另外包括最后一個元素
test = np.arange(1,11,0.5)
print(Data)
print(test)
print(Data.dtype)
print(test.dtype)

從arange向array轉換可通過reshape方法,如np.arange(1,11,1).reshape(2,5) #2為軸(行數)、5為每一個數組內的元素個數,如果第二個參數為-1則根據第一個參數以及數據元素個數自動計算
ndarray.zeros()打印數據元素數值為0的數組,ndarray.ones()打印數據元素數值為1的數組,ndarray.emptys()打印數據元素數值隨機的數組
3>打印數組(一維數組、二維數組、三維數組)
一維數組:以行顯示
二維數組:以矩陣顯示
三維數組:以矩數組表顯示

a = np.arange(6) # 1d array
print(a)
[0 1 2 3 4 5]

b = np.arange(12).reshape(4,3) # 2d array
print(b)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]

c = np.arange(24).reshape(2,3,4) # 3d array
print(c)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]] #這個對於一個接觸numpy不久的我也不熟呀,但套套還是知道,2是指有兩個第二個[],3是指每一個第二個[]內有三個子[],4是指子[]內包含多少數據元素
4>基本操作:
a.加減乘除開方不再話下
b.矩陣相乘使用 A@B A.dot(B) B.dot(A) 矩陣相乘
c.特殊操作:+=、*=、-=、/=。切記不要使用float+(- * /)int,當使用不同類型的數組進行運算時結果數組取更精確、更一般的類型
d.一元操作:sum用法、min用法、max用法,指定參數axis可以決定對多維數組的哪一軸進行運算,0代指第一軸、1代指第二軸,以此類推。
5>索引:一維數組:a[n],n從0到最后一個元素
多維數組:索引之間用逗號相隔
如果想對數組內所有元素分別依次打印,可以使用flat方法

data = np.array([
#     [ [1,2,12],[2,3,23],[3,4,34] ],
#     [ [4,5,45],[5,6,56],[6,7,67] ],
#     [ [7,8,78],[8,9,89],[9,0,90] ]
# ])   #三維數組,共有三個軸,每一個軸內數組又是一個三維數組,子軸內每一個數組內又包含3個元素數據
# for item in data.flat:
#     print('*'*20)
#     print(item)

6> 將多個數組(大於等於2)折疊成為一個數組以及將一個數組拆分為多個數組。
多個數組折疊為一個數組:
方法有三個:vstack(array_A,array_B) 、hstack(array_A,array_B)、colum_stack(array_A,array_B)array_A,array_B為不同的兩個數組。
vstack將兩個乃至多個數組折疊在同一個維度內。
vstack
hstack將同軸的數據元素相匹配,比如兩個二維數組A、B,A和B中第一軸之間相折疊,第二軸之間相折疊
hstack
一個數組拆分為多個數組:
方法有三個:vsplit(array,N),hsplit(array,n)
hsplit將數組內的每一個軸內的數據元素個數按照N份拆分,如果數組是二維數組則拆分后依舊是二維數組,僅每個軸內的數據元素數量減少
vsplit將數組內的軸進行拆分,即若數組為N維數組,則可拆分的范圍在[1,N-1]。如果N/n不為整數或超出范圍則會報錯:ValueError: array split does not result in an equal division
hsplit、vsplit
7>拷貝和視圖
如果要將一個數組內的數據元素全部復制到另一個數組,淺拷貝由.view()方法解決,深拷貝由.copy()解決。淺、深拷貝的區別在於拷貝后的數組內的數據元素改變數值淺拷貝中原來數組相應的值同樣會發生改變,但深拷貝則不會。而不完全復制與淺拷貝的唯一區別在於id()在淺拷貝中原來數組與拷貝后的數組不同,不完全復制則相同。
8>布爾數組進行索引(淺談),


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM