Numpy基礎學習

Numpy基礎學習(一)

Numpy基礎學習

本文主要內容來自《Python數據分析基礎教程 NumPy學習指南》第二版,建議直接閱讀該書。

import numpy as np

#創建一維數組
a = np.arange(5)
print(a)#[0 1 2 3 4]
print(a.dtype)#int64
print(a.shape)#(5,);shape屬性返回一個元組(tuple),元組中的每個元素代表一個維度上的大小。

#創建多維數組
m = np.array([np.arange(3),np.arange(3),np.arange(3)])
print(m)#[[0 1 2][0 1 2] [0 1 2]]
print(m.shape)#(3 3 3)
#選取數組元素
#嵌套的列表
print(m[0,0])#0

#Numpy數據類型及轉化函數
#float16,float32,float64或float,inti,int8,int16,int32,int64,uint8,uint16,uint32,uint64,,bool,complex64,complex128或complex

#複數是不能轉換成整數,浮點數,會觸發TypeError;但浮點數可以轉換爲複數列如,complex(1.0)

#單個元素在內存中佔用的字節數
print(a.dtype.itemsize)#8

#字符編碼 整數i,無符號整數u,單精度浮點數f,雙精度浮點數d,布爾值b,複數D,字符串str,unicode字符串U,void(空)V
f = np.arange(7,dtype='f')
print(f)#[0. 1. 2. 3. 4. 5. 6.]
s = f.astype('str')
print(s)#['0.0' '1.0' '2.0' '3.0' '4.0' '5.0' '6.0']

#自定義數據類型數組
t = np.dtype([('name','str',40),('numitems', 'int32'),('price','float32')])
print(t)
itemz = np.array([('M',42,3.14),('b',13,2.72)],dtype=t)
print(itemz[1])#('b', 13, 2.72)

#一維數組的索引和切片
a = np.arange(9)
#用下標3-7來選取元素3-6
b = a[3:7]
print(a,b)#[0 1 2 3 4 5 6 7 8] [3 4 5 6]
#用下標0-7,以2爲步長選取元素
print(a[:7:2])#[0 2 4 6]
#用負數下標翻轉數組
print(a[::-1])#[8 7 6 5 4 3 2 1 0]

#多維數組的切片和索引
b = np.arange(24).reshape(2,3,4)
print(b)
'''
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
  用三維數組b,來表示樓層,行,列
'''
#選取所有樓層的第一行,第一列
print(b[:,0,0])#[ 0 12]
#選取第一層
print(b[0])
#或
print(b[0,:,:])
#或
print(b[0,...])
'''[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
 '''
#將第一樓層第2排的進行切片
print(b[0,1])#[4 5 6 7]
print(b[0,1,::2])#[4 6]
print(b[0,1,::3])#[4 7]
print(b[0,1,:2])#[4 5]
#不指定樓層,獲取第2列的房間
print(b[...,1])
print(b[:,1])
'''[[ 4  5  6  7]
 [16 17 18 19]]
 '''
#獲取第一層樓,所有位於第二列的房間
print(b[0,:,1])#[1 5 9]
#獲取第一層樓,所有位於最後一列的房間
print(b[0,:,-1])#[ 3  7 11]
#反向選取第一層樓最後一列的所有房間
print(b[0,::-1,-1])#[11  7  3]
print(b[0,::2,-1])#[ 3 11]

#改變數組的維度
#使用ravel函數展平數組,不會保存結果,返回數組的一個視圖
print(b.ravel())#[ 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(b)
''' [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
'''
#使用flatten函數展平數組,會保存結果
print(b.flatten())
print(b)
#用元組設置維度,reshape設置維度,resize(會直接修改所操作的數組)
b.shape = (6,4)
print(b)
'''[[ 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(b.reshape(6,4))
'''[[ 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(b.resize(2,12))
# print(b)
'''
[[ 0  1  2  3  4  5  6  7  8  9 10 11]
 [12 13 14 15 16 17 18 19 20 21 22 23]]
'''

#transpose  轉置矩陣在線性代數中,操作很常見
# print(b.transpose())
'''[[ 0  4  8 12 16 20]
 [ 1  5  9 13 17 21]
 [ 2  6 10 14 18 22]
 [ 3  7 11 15 19 23]]
 '''

#數組的組合,包括水平組合,垂直組合和深度組合方式,將使用vstack,dstack,hstack column_stack,row_stack 以及concatenate函數完成數組的組合
#創建數組
a = np.arange(9).reshape(3,3)
b = 2 * a

# print(a,b)
'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[ 0  2  4]
 [ 6  8 10]
 [12 14 16]]
'''
#水平組合hstack,concatenate
print(np.hstack((a,b)))
print(np.concatenate((a,b),axis=1))
'''
[[ 0  1  2  0  2  4]
 [ 3  4  5  6  8 10]
 [ 6  7  8 12 14 16]]
'''
#垂直組合
print(np.vstack((a,b)))
print(np.concatenate((a,b),axis=0))
'''
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 0  2  4]
 [ 6  8 10]
 [12 14 16]]
'''
#深度組合,將一系列數組沿縱軸方向層疊組合
print(np.dstack((a,b)))
'''
[[[ 0  0]
  [ 1  2]
  [ 2  4]]

 [[ 3  6]
  [ 4  8]
  [ 5 10]]

 [[ 6 12]
  [ 7 14]
  [ 8 16]]]
'''
#列組合column_stack對於一維數組按列的方向組合,二維數組和hstack 效果一樣。
oned = np.arange(2)
twice = 2*oned

print(np.column_stack((oned,twice)))
'''
[[0 0]
 [1 2]]
'''
print(np.column_stack((a,b)))
'''
[[ 0  1  2  0  2  4]
 [ 3  4  5  6  8 10]
 [ 6  7  8 12 14 16]]
'''
#row_stack對於一維數組行組合直接疊加,二維數組和vstack效果相同。
print(np.row_stack((oned,twice)))
'''
[[0 1]
 [0 2]]
'''
#數組的分割hsplit,vsplit,dsplit,split
print(a)
'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]
'''
print(np.hsplit(a,3))
print(np.split(a,3,axis=1))
'''
[array([[0],
       [3],
       [6]]),
array([[1],
       [4],
       [7]]),
array([[2],
       [5],
       [8]])]
'''
#垂直分割
print(np.vsplit(a,3))
print(np.split(a,3,axis=0))
'''
[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
'''
#深度分割dsplit函數將深度方向分割數組。
c = np.arange(27).reshape(3,3,3)
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]
  [24 25 26]]]
'''
print(np.dsplit(c,3))
'''
[array([[[ 0],
        [ 3],
        [ 6]],

       [[ 9],
        [12],
        [15]],

       [[18],
        [21],
        [24]]]), array([[[ 1],
        [ 4],
        [ 7]],

       [[10],
        [13],
        [16]],

       [[19],
        [22],
        [25]]]), array([[[ 2],
        [ 5],
        [ 8]],

       [[11],
        [14],
        [17]],

       [[20],
        [23],
        [26]]])]
'''
#數組的屬性
#ndim數組的維數,或數組的軸的個數
print(b.ndim)#2
#size 元素的總個數
print(b.size)#9
#元素在內存中所佔的字節數
print(b.itemsize)#8
#數組佔的存儲空間
print(b.nbytes)#72
#T屬性的效果和transpose函數一樣
#real 輸出複數數組的實部
#imag 輸出數組的虛部
#flat返回一個numpy.flatiter對象
#數組的轉換tolist()
print(b.tolist())#[[0, 2, 4], [6, 8, 10], [12, 14, 16]]
#astype轉換數組時指定數據類型
print(b.astype(int))
'''
[[ 0  2  4]
 [ 6  8 10]
 [12 14 16]]
'''

發佈了19 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章