天天看點

Numpy學習筆記第一篇

import numpy as np
a=np.arange(5)
a.dtype,a.shape

#把arange函數建立的數組作為清單元素,并把這個清單作為參數傳遞給array函數,進而建立了一個3*3的矩陣
c=np.array([np.arange(3),np.arange(3),np.arange(3)])
c

c[0,1] #第一行第二列

#建立浮點小數,複數
float(12),complex(1.0)

a=np.arange(6,dtype='uint16')
b=np.arange(7,dtype='D')
a,b,a[:-1]

#numpy中每一個數組元素均為同一資料類型,資料類型對象可以給出單個數組元素在記憶體中占用的位元組數(itemsize)                           
#sctypeDict.keys() 完整的資料型清單
a.dtype.itemsize

from numpy import dtype
t=np.dtype([('name',str),('numitems',int),('price',float)])
t

t['name']

comeon=np.array([('numpy',42,3.13),('bug',10,0.8)],dtype=t)
comeon

comeon[0]

b=np.arange(24).reshape(2,3,4)#生成2*3*4的矩陣
b

資料的索引和切片

print(b[0,0,0],'\n',b[:,0,0],'\n',b[0,:,:])

b[1,...],b[1]#等同

b[0,1,],b[0,:,-1]

b[0,::-1,-1]#從最後一行取起

b[0,::2,-1]#隔行取

b[::-1]#從第俄格矩陣取起

ravel(),flatten()

兩者所要實作的功能是一緻的(将多元數組降位一維)。
這點從兩個單詞的意也可以看出來,ravel(散開,解開),flatten(變平)。
兩者的差別在于傳回拷貝(copy)還是傳回視圖(view)
numpy.flatten()傳回一份拷貝,對拷貝所做的修改不會影響(reflects)原始矩陣,而numpy.ravel()傳回的是視圖(view,也頗有幾分C/C++引用reference的意味),會影響(reflects)原始矩陣

shape(),transpose()
resize()數組次元的更改

b.ravel()

b.flatten()

b.shape=(6,4)
b

b.transpose()

b.resize((2,12))
b

數組的組合

a=np.arange(9).reshape(3,3)
c=2*a #可直接做運算
a,c

hstack((a,c))==concatenate((a,c),axis=1)

hstack(value)
value必須具有相同的資料結構,資料類型不限,可以是python的清單或者元祖,或者是numpy清單
hstack會将多個value(value_one, value_two)的相同次元的數值組合在一起,并以同value同樣的資料結構傳回numpy數組

np.hstack((a,c))

np.hstack([a,c])

np.concatenate((a,c),axis=1)

np.vstack((a,c))

np.concatenate((a,c),0)

np.dstack((a,c))

oned=np.arange(2)
twice_oned=2*oned
onedcombine=np.column_stack((oned,twice_oned))
oned,twice_oned,onedcombine

np.column_stack((a,c))

np.row_stack((oned,twice_oned))

np.row_stack((a,c))

數組的分割

a #3*3

np.hsplit(a,3) #從列的方向上分割成3個數組

np.split(a,3,axis=1)

np.split(a,3,axis=0)##從行的方向上分割成3個數組

np.vsplit(a,3)

d=np.arange(27).reshape(3,3,3)
d

np.dsplit(d,3)

數組的屬性和數組的轉換

b

b.ndim

b.size

b.itemsize

b.nbytes

b.resize

b.T

b.transpose

c=np.array([1,1+9j,"av"])
c

c.ndim

d=np.array([2+7j,9j,8+2j])
d

d.real  #取實數部分

d.imag  #取虛數部分

c.dtype

d.dtype

b.dtype

b=np.arange(9).reshape(3,3)
f=b.flat

f

for item in f:print(item)

b.flat[2]

b.flat[[1,4]]

b.flat[[1,4]]
b.flat[[1,3]]=6

b

b.tolist() #将數組或者矩陣轉換成清單

b.astype(float)