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無關
沒有留言:
張貼留言