Numpy 資料型別和基本操作

xie仗劍天涯發表於2017-03-26

Numpy 資料型別

bool 用一位儲存的布林型別(值為TRUE或FALSE)
inti 由所在平臺決定其精度的整數(一般為int32或int64)
int8 整數,範圍為128至127
int16 整數,範圍為32 768至32 767
int32 整數,範圍為231至231 1
int64 整數,範圍為263至263 1
uint8 無符號整數,範圍為0至255
uint16 無符號整數,範圍為0至65 535
uint32 無符號整數,範圍為0至2321
uint64 無符號整數,範圍為0至2641
float16 半精度浮點數(16位):其中用1位表示正負號,5位表示指數,10位表示尾數
float32 單精度浮點數(32位):其中用1位表示正負號,8位表示指數,23位表示尾數
float64或float 雙精度浮點數(64位):其中用1位表示正負號,11位表示指數,52位表示尾數
complex64 複數,分別用兩個32位浮點數表示實部和虛部
complex128或complex 複數,分別用兩個64位浮點數表示實部和虛部

 一維陣列的索引和切片

import numpy as np
d = np.arange(9)
print (d)
# [0 1 2 3 4 5 6 7 8]
print (d[2:4]) # 獲取2~4 之間的元素
# [2 3]
print (d[::-1]) # 負數下標翻轉陣列
# [8 7 6 5 4 3 2 1 0]

# 改變陣列的維度
# reshape 改變陣列維度(重新調整矩陣的行數、列數、維數。)

import numpy as np
e = np.arange(9)
print (e)
# [0 1 2 3 4 5 6 7 8]
e1 = e.reshape(3,3) # 
print (e1)
#[[0 1 2]
# [3 4 5]
# [6 7 8]]

ravel函式完成展平

import numpy as np
f = np.arange(24).reshape(2,3,4)
print (f)
#[[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
#
# [[12 13 14 15]
# [16 17 18 19]
# [20 21 22 23]]]
f1 = f.ravel()
print (f1)
#[ 0 1 2 ..., 21 22 23]

flatten 這個函式恰如其名,flatten就是展平的意思,與ravel函式的功能相同。不過,flatten函式會請求分配記憶體來儲存結果,而ravel函式只是返回陣列的一個檢視(view)

f2 = f.flatten()
print (f2)
#[ 0 1 2 ..., 21 22 23]

shape,用元組設定維度

f.shape=(6,4)
print (f)
#[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]
# [16 17 18 19]
# [20 21 22 23]]

resize,resize和reshape函式的功能一樣,但resize會直接修改所操作的陣列:

f.resize((2,12))
print (f)
#[[ 0 1 2 ..., 9 10 11]
# [12 13 14 ..., 21 22 23]]

陣列的組合

import numpy as np
a = np.arange(9).reshape(3,3)
print (a)
#[[0 1 2]
# [3 4 5]
# [6 7 8]]
b = 2 * a
print (b)
#[[ 0 2 4]
# [ 6 8 10]
# [12 14 16]]

# 1. 水平組合hstack函式

h = np.hstack((a,b))
print (h)
#[[ 0 1 2 0 2 4]
# [ 3 4 5 6 8 10]
# [ 6 7 8 12 14 16]]

# 2. 垂直組合vstack函式

v = np.vstack((a,b))
print (v)
#[[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 0 2 4]
# [ 6 8 10]
# [12 14 16]]

# 3. 深度組合dstack函式(將一系列陣列沿著縱軸(深度)方向進行層疊組合)

d = np.dstack((a,b))
print (d)
#[[[ 0 0]
# [ 1 2]
# [ 2 4]]
#
# [[ 3 6]
# [ 4 8]
# [ 5 10]]
#
# [[ 6 12]
# [ 7 14]
# [ 8 16]]]

# 4. 列組合,column_stack函式對於一維陣列將按列方向進行組合,對於二維陣列,column_stack與hstack的效果是相同

c = np.arange(5)
c1 = 2 * c
c2 = np.column_stack((c,c1))
print (c2)
#[[0 0]
# [1 2]
# [2 4]
# [3 6]
# [4 8]]

l = np.column_stack((a,b))
print (l)
#[[ 0 1 2 0 2 4]
# [ 3 4 5 6 8 10]
# [ 6 7 8 12 14 16]]

# 行組合row_stack函式(對於兩個一維陣列,將直接層疊起來組合成一個二維陣列,對於二維陣列,row_stack與vstack的效果是相同的)

c = np.arange(5)
c1 = 2 * c
c3 = np.row_stack((c,c1))
print (c3)
#[[0 1 2 3 4]
# [0 2 4 6 8]]

r = np.row_stack((a,b))
print (r)
#[[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 0 2 4]
# [ 6 8 10]
# [12 14 16]]

# 分割陣列

A = np.arange(9).reshape(3,3)
print (A)
#[[0 1 2]
# [3 4 5]
# [6 7 8]]

# 1. 水平分割 hsplit函式

H = np.hsplit(A,3)
print (H)
#[array([[0],
# [3],
# [6]]), array([[1],
# [4],
# [7]]), array([[2],
# [5],
# [8]])]


# 呼叫split函式並指定引數axis=1

H1 =np.split(A,3,axis=1)
print (H1)
#[array([[0],
# [3],
# [6]]), array([[1],
# [4],
# [7]]), array([[2],
# [5],
# [8]])]

# 2. 垂直分割,vsplit函式

V = np.vsplit(a,3)
print (V)
#[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]


# 呼叫split函式並指定引數axis=0

V1 = np.split(A,3,axis=0)
print (V1)
#[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]

# 3. 深度分割,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]]]
D = np.dsplit(C,3)
print (D)
#[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]]])]


# 陣列的屬性

num = np.arange(24).reshape(2,12)
print (num)
#[[ 0 1 2 ..., 9 10 11]
# [12 13 14 ..., 21 22 23]]


# 1. ndim屬性,給出陣列的維數,或陣列軸的個數

print (num.ndim)
#2


# 2. size屬性,給出陣列元素的總個數

print (num.size)
#24


# 3. itemsize屬性,給出陣列中的元素在記憶體中所佔的位元組數

print (num.itemsize)
#4


# 4. nbytes屬性,整個陣列所佔的儲存空間(itemsize和size屬性值的乘積)

print (num.nbytes)
#96


# 5. T屬性,效果和transpose函式一樣

# 陣列的轉換,tolist函式

相關文章