在python 3 環境下,根據切身使用numpy經驗,總結了一些小的常用的numpy方法和技巧。
1. np.array 可將序列物件(如列表和元包)轉換為陣列,可以生成一維或多維陣列,生成多維陣列時要對齊。
a = [[1,2,3],[4,5,6]]
b = np.array(a)
2. 陣列與列表的相互轉換
a = np.ones((2,2))
b = a.tolist() # 陣列轉列表
c = [[1,2,3],[4,5,6]]
d = np.array(c) # 列表轉陣列
e = [1,2,3],[4,5,6]
g = np.array(e)#元組轉陣列
3. 低精度和高精度一起,會轉換為高精度的
a = np.array((1,2.1,3,4,5,6))
b = a.reshape(2,3)
print(a.shape, a.dtype)
4. np.arange(n) 生成一維從0到n-1的向量,可以設定範圍和步長,如np.arange(1,10,2)。python 內建的range生成從0到n-1的列表,一般只用於for迴圈中。
a = np.arange(15)
for i in range(15):
print(i)
5. np.ones .zeros .empty 裡面需要傳入乙個元組或列表,來指定建立什麼形狀,同時可以指定資料型別dtype。
a = np.ones((2,2), dtype = int)
b = np.zeros(10)
6. np.astype 實現資料型別轉換,string型別的數字(如'123')也可以轉換為int。
a = np.array((1,2,3,4))
print(a.dtype)
b = a.astype(np.float64)
print(b.dtype)
7. 大小相等的陣列之間的任何運算都會元素級的,特別注意陣列之間的乘法是元素級的,要實現矩陣乘法,需要用np.dot。
8. 陣列的切片是原始陣列的檢視,資料在賦值時不會複製,想要複製資料,需要在切片後加.copy()
9. 陣列切片用方括號[ ],切片的形式為[start:end:step], 在切片時起點和終點至少要指定乙個。不指定的部分,表示一直到索引最開始或者最後。-1 可以表示最後乙個元素,:表示複製原列表。索引有幾種形式,如[1,2], [:,3],[:2,3:] 注意索引的結尾數要減1,開頭不需要。還有花式索引,a[[1,2,3]] 取對應的行,a[:,[1,2,3]]取對應的列,花式索引會複製資料,注意a[[1,2,3],[1,2,3]] 取的是3個對應位置的數字。進行反向索引時,要在數字前全部加負號,如[-2: -10:-1] 表示取向量的倒數第2個到倒數第10個,步長為2; [-1::-1] 表示從最後乙個按照步長為1一直取到第1個。
a = np.arange(30).reshape(6,5)
b = a[:2,3:]
c = a[[1,5,2]]
d = a[:,[3,4,1]]
a = b[b[:,0] == c, :] ## 取出某列中所有滿足特定值的所有行,此式子為取出b中第0行裡所有值等於c的所有行
a = b[~b[:,0] == c, :] ## 反轉,取出所有不滿足該條件的
10. 陣列之間的拼接有兩種方法,hstack,vstack分別對應行拼接和列拼接;concatenate裡axis=0對應列軸,=1對應橫軸。hsplit, vsplit以及split(與concatenate對應)實現矩陣的指定份數的均等分。
a = np.ones((1,2))
b = np.zeros((3,2))
c =np.ones((3,3))
d = np.hstack((b,c))
e = np.concatenate((b,c),axis = 1)
f = np.vstack((a,b))
g, h, i = np.hsplit(c, 3)
11. 陣列中最小最大元素的索引:np.argmin,np.argmax;陣列中最小最大的元素:np.max,np.min。
a = np.arange(30).reshape(6,5)
b = np.argmax(a)
12. python內建zip函式,可以將多個可迭代物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表,當所有物件長度不一致時,以短的為主。
a = np.array((1,2,3))
b = np.array((4,5,6))
c = zip(a,b)
for i, j in zip(a,b):
print(i,j)
13. numpy.where(conditon[, x, y]) 條件邏輯表示式,方括號內可省去,如果條件為true,則其值取x,否則取y。 如果只有條件,則範圍條件中非0元素的索引。其等效為 value = x if c else y for c, x, y in zip(condition, xarr, yarr)。
xarr = np.array([1.1, 1.2, 1.3, 1.4])
yarr = np.array([2.1, 2.2,2.3, 2.4])
condi = np.array([true, false, true, false])
value = np.where(condi, xarr, yarr)
14. 基礎數學和統計方法中,sum,mean, std, var(方差), min, max, argmin, argmax (arg系列返回最值的索引), cumsum等可以分別針對陣列整體,以及axis = 0 (y軸,向), = 1 (x軸, 橫向)進行資料統計。
a = np.random.randn(5,5) # 正態分佈隨機數
b = np.argmin(a)
c = np.argmin(a, axis = 0)
d = a.argmin(axis = 1)
15. 對布林型陣列的方法, python裡0與false, 非0元素與true對應,針對布林型陣列的方法有,sum統計true的個數,實質對0與1的求和,any判斷是否有true, all判斷是否全為true。
a = np.array([false, true, false, false])
print(a.sum())
print(a.any())
print(a.all())
16. sort對指定軸進行從
小到大的排序, argsort 是間接排序、返回數值從小到大的索引
a = np.random.randn(5,3)
b = np.sort(a) # 預設axis=0
b2 = np.sort(a, axis = 0)
b3 = np.sort(a, axis = 1)
17. 唯一化和集合邏輯: unique返回矩陣中唯一值的序列(即所有出現過元素的序列),python內建的set只能針對向量,返回向量中的唯一值序列,該序列只能作為迭代序列,一般用於for迴圈等迭代中。intersect1d(x,y) x與y的交集, union1d(x,y) x與yd的並集, in1d(x,y) x中的元素是否在y集合中, setdiff1d(x,y) 集合差 setxor1d(x,y)異或。
a = np.array(('bob','alice','joe','will','bob','joe'))
b = np.unique(a)
a2 = np.array((1,2,3,4,2,3,1,5,3,2,6,5,7,6,4))
b2 = np.unique(a2)
a3 = np.array([[1,2,3],[2,3,4],[1,2,4]])
b3 = np.unique(a3)
for item in set(a2):
print (item)
18. 線性代數操作, 主要方法有dot(點乘), diag(返回方陣對角元素), trace(返回方陣的跡), det(行列式), eig(f方陣特徵值和特徵向量), inv(方陣的逆), pinv(廣義逆), qr(qr分解), svd(奇異值分解), slove(解方程ax=b)。
19. 在anconda中,針對向量和陣列的處理是不同的,向量不分行向量和列向量,形式為size a(3, ) 是長度為3的向量;陣列為size a(3,1)。在程式設計時,要注意區分,最好把向量轉為陣列。
numpy常用技巧
資料拼接 注意是兩個資料的拼接 當不輸入axis引數時,此時預設axis none,兩個array的shape可以不一樣。否則會出錯。當輸入axis引數時,其所對應axis值的shape被拼在一起,而其他的shape值應當一樣。此時兩個array被拼接在了一起。再來一例子 可以看到是shape 2 ...
Pandas常用方法和使用技巧
在python 3 環境下,根據實際使用pandas的一些經驗,簡單總結了一下pandas的使用要點。pandas 有三種結構,都可以指定索引,預設情況下,索引值從0。三種結構分別為 1.series初始化 data 1,2,3,4 a series data b series data,index...
numpy常用方法
資料的載入 常用引數 np.loadtext frame,delimiter,dtype,skiprows,usecols,unpack egfile path np.loadtext file path,delimiter dtype int skiprows 0,usecols 0 unpack...