2016年8月10日 星期三

numpy

numpy是python常用外掛之一
tutorial可以參考這裡



.array(([1,2,3],[4,5,6])) /.array([[1,2,3],[4,5,6]])
#用tuple建立ndarray

#產生ndarray資料內容清0/1
.zeros((2,3))
.ones((2,3))

.empty((2,3)) #產生ndarray,資料內容不清空
.arange(0,10,1) #產生[0,1...,9](start 0, <10, 遞增1)
.arange(5) #== .arange(0,5,1)
.linspace(0,10,3) #產生[0,5,10](start 0, end 10,共3個element)

myArray.reshape(2,3) #將myArray變成2x3
print(myArray) #印出my Array,如果myArray很大,中間會被...取代,若要避免此狀況,可以用.set_printoptions(threshold='nan')

a1 == a2 #比較每個element
a1 is a2 #比較array id
a1-a2
a1*2
a1 +=  / *= / -=1
a1*a2 #a1,a2逐element相乘
a1.dot(a2)/ .dot(a1,a2) #dot
a1**3 #次方[0,1,2]**3 = [0,1,8]
a1<1 #每個element判斷 [t,f,f]
.sin(a1) #計算每個element的sin值
.exp() / .sqrt() .... # universal functions

#以下的操作把a1當作是一個list(不考慮shape)
a1.sum()
a1.max()
a1.min()
#可以輸入變數axis = n決定要操作的軸
a1 = array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
a1.max() =14
a1.max(axis=0) =array([ 4,  9, 14])
a1.max(axis=1) =array([10, 11, 12, 13, 14])

1d array的操作跟list或其他 python序列類似,可以indexed,sliced, iterated over
a[2]
a[2:5]
a[1:6:2] #form 1 to exclusive 6 step 2
for i in a

nd array
m用function指定array  element
#99乘法表
def f(x,y):
    return (x+1)*(y+1)

a = np.fromfunction(f,(9,9), dtype = int)
a[1:5,1:5] #不含5
a[1:5,:] #:是全部,等於a[1:5]等於a[1:5,...]
for row in a:
    print(row) #一次iterate一個row

[1,2,3...8,9]
[2,4,6...16,18]
[3,6,9...24,27]
...
若要iterate每個element
for element in a.flat

a.shape #取得每個軸的size
a.ravel() #取得1d陣列
a.T #轉置
a.resize((3,27)) #產生新的data
a.reshape(3,27) #不產生新data == a.shape = 3,27
a.reshape(3,-1)

np.vstack((a1,a2...)) #1st axis = np.c_[a1,a2...]
np.hstack((a1,a2...)) #2nd axis = mp.r_[a1,a2...]
np.concatenate((a1,a2...), axis = n)

np.hsplit(a,3) # 將a水平等分為3個array(a在h方向的shape必須可以被3整除)
np.hsplit(a,(3,6)) #在水平方向上的3,6 column分割a
np.vsplit(a,3)
np.array_split #自行指定分割維度

not copy
a2 = a1 #a2 is a1 == True
#函式呼叫不copy
def f(x):
    return id(x)
id(a) == f(a)
True

shallow copy
b = a.view()
改b的值會影響a,but reshape b對a沒影響
c = a[1:3,1:3] #一樣是shallow copy

deep copy
c = a.copy()
連data一起copy,修改c跟a無關


沒有留言:

張貼留言