python 數據處理第一章 numpy庫的基本用法

ndarray數組基本知識

import numpy as np

ndarray instance properties(實例屬性)

ndim 維數 itemsize 元素佔用的字節數 dtype 元素類型 shape形狀

x=np.array([1,2,3,4])
y=np.array([[1,2,3,4],[5,6,7]])
z=np.array([[1,2,3,4],[2,3,4,5]])
print(“x.shape:”,x.shape,”y.shape:”,y.shape,”z.shape:”,z.shape)#行主序
print(“x.itemsize:”,x.itemsize,”y.itemsize:”,y.itemsize,”z.itemsize:”,z.itemsize)
print(“x.dtype:”,x.dtype,”y.dtype:”,y.dtype,”z.dtype:”,z.dtype)
print(“x.ndim:”,x.ndim,”y.ndim:”,y.ndim,”z.ndim:”,z.ndim)
print(“x.size:”,x.size)#[1 2 3 4]
print(“y.size:”,y.size)#[list([1, 2, 3, 4]) list([5, 6, 7])]
print(“len(z):”,len(z))#Return the number of items in a container 最外層的個數.

ndarray constructor(構造器)

1.arange(start,stop(最後一個數小於stop),step(步長),dtype)

print(“np.arange(10,dtype=int):”,np.arange(10,dtype=int))
print(“np.array(1,10,2,dtype=float):”,np.arange(start=1,stop=10,step=2.73,dtype=float))

2.linspace(start,stop,num(個數),endpoint(最後一個元素是否算上),restep(是否將步長返回))

print(“np.linspace(start=12,stop=40,num=20,endpoint=False,retstep=True):”,np.linspace(start=12,stop=40,num=20,endpoint=False,retstep=True))
print(“np.linspace(start=12,stop=40,num=20,endpoint=True,retstep=False):”,np.linspace(start=12,stop=40,num=20,endpoint=True,retstep=False))

3.zeros, ones, full ,eye

print(“np.zeros((2,4)):”,np.zeros((1,4)))
print(“np.ones(4,):”,np.ones((4,)))
print(“np.full((1,2),2):”,np.full((4,1),2))
print(“np.eye(3):”,np.eye(3))#nxn單位矩陣

4.ones_like, zeros_like, full_like(a,val)

print(“np.ones_like(x):”,np.ones_like(x))
print(“np.zeros_like(x):”,np.zeros_like(x))
print(“np.full_like(x,2):”,np.full_like(x,2))

ndarray conversion(convert)(數組變換)

1.concatenate

print(“np.concatenate(x,y):”,np.concatenate((x,y)))#要求維度相同All the input arrays must have same number of dimensions
print(“np.concatenate(x,y).shape:”,np.concatenate((x,y)).shape)

2.instance conversion method

1) y=x.reshape(shape)不改變數組元素,返回一個shape形狀的原數組的view(實在不行時再返回copy),原數組不變 和y=np.reshape(x,new_shape)一樣

z=np.array([[1,2],[3,4],[3,5],[2,6]])
z_reshape=z.reshape((4,2))
z_T_reshape=z.T.reshape((2,4))
print(“np.may_share_memory(z,z_reshape)?”,np.may_share_memory(z,z_reshape))
print(“np.may_share_memory(z,z_T_reshape)?”,np.may_share_memory(z,z_T_reshape))
print(“z.flags[‘OWNDATA’]?”,z.flags[‘OWNDATA’])
print(“z_reshape.flags[‘OWNDATA’]?”,z_reshape.flags[‘OWNDATA’])
print(“z:”,z)

print(“z_reshape[0,:]:”,z_reshape[0,:])

z_reshape.resize((2,4))
print(“z_reshape.resize((2,4)):”,z_reshape)
print(“z:”,z)

reshape_2=np.array([1,2,3,4]).reshape((2,2))
reshape_2.resize(4,1)
print(“reshape_2:”,reshape_2)

z_2=z
z.resize((2,4))#2)x.resize(shape)修改原數組,沒有返回值
print(“z_2:”,z_2)
print(“z:”,z)

np.resize(x,new_shape)新生成一個數組,佔用不同的內存空間

np_resize=np.resize(z,(4,2))#不改變原數組
print(“z:”,z)
print(“np.may_share_memory(np_resize,z)?”,np.may_share_memory(np_resize,z))

3)降維

x.flatten() Return a copy of the array collapsed into one dimension.

np.ravel(x,order=’C’) It is equivalent to reshape(-1, order=order) 不改變原數組 返回的有可能是copy 有可能是view(佔用同一內存空間,別名)

np_ravel=np.array([[1,2,3],[4,3,5]])
copy_np_ravel=np.ravel(np_ravel[:,0])#返回copy 空間不連續,只能新生成一個數組

print(“np.may_share_memory(np_ravel,copy_np_ravel)?”,np.may_share_memory(np_ravel,copy_np_ravel))
print(“copy_np_ravel.flags[‘OWNDATA’]?”,copy_np_ravel.flags[‘OWNDATA’])
print(“copy_np_ravel.base is np_ravel?”,copy_np_ravel.base is np_ravel)

view_np_ravel=np.ravel(np_ravel)#內存是連續的,只是看待內存的方式不一樣 返回一view
print(“np.may_share_memory(np_ravel,view_np_ravel)?”,np.may_share_memory(np_ravel,view_np_ravel))
print(“view_np_ravel.flags[‘OWNDATA’]?”,view_np_ravel.flags[‘OWNDATA’])
print(“view_np_ravel.base is np_ravel?”,view_np_ravel.base is np_ravel)

print(“np_ravel np.ravel:”,np.ravel(np_ravel))
print(“np_ravel x.reshape(-1):”,np_ravel.reshape(-1))

4)y=x.astype(new_type)改變itemtype,返回新生成的數組

5)x.tolist() ndarray對象-》python中的原生list類型

print(“z.flatten():”,z.flatten())
new_array=x.astype(float)
print(“new_array:”,new_array)
print(“x:”,x,”x.tolist():”,x.tolist())

ndarray 數組的索引和切片

1.一維數組的索引和切片

x=np.array([1,2,3,4,5])
print(“x[2]”,x[2])
print(“x[1:4:2]”,x[1:4:2])#起始編號,終止編號(不含),步長
print(“x[:]:”,x[:])

2.多維數組的索引和切片

x=np.arange(24).reshape((4,6))
print(“x:”,x)
print(“x[1,2]:”,x[1,2])
print(“x[:,1:20:2]:”,x[:,1:4:2])

ndarray 數組運算

大小相等的數組之間的任何算術運算都會將運算應用到元素級。同樣,數組與標量的算術運算也會將那個標量值傳播到各個元素。不同大小的數組之間的運算叫做廣播。

x=np.array([1,2,-3,-4.5,5])
x=x/x.mean()#mean(數組元素均值
print(“x:”,x)

1)一元函數

x=np.array([1,2,3,4.3,5.6])
print(“np.abs(x):”,np.abs(x))#abs和fabs,abs是整數取絕對值,而fabs是指浮點數取絕對值
print(“np.fabs(x):”,np.fabs(x))
print(“np.sqrt(x):”,np.sqrt(x))#平方根
print(“np.square(x):”,np.square(x))#平方
print(“np.log(x):”,np.log(x))#e爲底的對數
print(“np.log2(x):”,np.log2(x))
print(“np.log10(x):”,np.log10(x))
print(“np.ceil(x):”,np.ceil(x),” np.floor(x):”,np.floor(x))#ceiling(向上取整) and floor(向下取整)
print(“np.rint(x):”,np.rint(x))#四捨五入
print(“np.modf(x):”,np.modf(x))#返回一個元組,裏面是各元素的額小數部分和整數部分各形成獨立的數組

np.cos(x) np.sin(x) np.tan(x) np.exp(x) np.sign(x)(各元素取符號函數)

print(“np.cos(x):”,np.cos(x))
print(“np.exp(x):”,np.exp(x))
print(“np.sign(x):”,np.sign(x))

2)二元函數 同shape 不同shape進行廣播(broadcast)處理

+ - * **(乘方) /

y=np.array([1,2,3,4,10.46])
print(“x+y:”,x+y)

np.maximum(x,y) np.fmax(x,y)

np.minimum(x,y) np.fmin(x,y)

各個元素比較之後,對應的較大者或較小者組成一個新的同shape的數組

print(“np.maximum(x,y):”,np.maximum(x,y))
print(“np.fmin(x,y):”,np.fmin(x,y))

np.mod(x,y) x/y 對應元素相除剩下的餘數

print(“np.mod(x,y):”,np.mod(x,y))

np.copysign(x,y)將y的符號賦予x

print(“np.copysign(x,y):”,np.copysign(x,y))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章