numpy常用方法


假設 :

import scipy.io as scio
import operator
import numpy as np
1.求平均值 mean
array1.mean(axis=0) == numpy.mean(array1, axis=0)

Examples
--------
>>> a = np.array([[1, 2], [3, 4]])
>>> np.mean(a)
2.5
>>> np.mean(a, axis=0)
array([ 2., 3.])
>>> np.mean(a, axis=1)
array([ 1.5, 3.5])
axis=0 對 列求平均值。

2.求方差 std
array1.std(axis=0) == numpy.std(array1, axis=0)
axis的意義同1,求方差。

3.numpy scipy pandas 區別
NumPy 是基礎的 數學 計算庫,包括 基本的四則運行,方程式 計算,微積分 什麼的,還有很多其他數學方面的計算,我也不是很清楚
SciPy :是在NumPy基礎上,封裝了一層,沒有那麼純數學,提供方法直接計算結果
Pandas 就是上層做數據分析用的,主要是做表格數據 呈現
如果不是純數學專業還是從 Pandas 入手比較好。

4.讀.mat文件 loadmat
scio.loadmat(train_data_file) 
# return is a dict

5.求幾次方 **
diff ** 2 
# 2次方,2換成0.5就是開方 diff 可數字和數組

6.數組求和 sum
diff.sum(axis=1)
# 求數組的和, axis的值同上 0是列; 1是行; diff 數組

7.排序下標 argsort
diff.argsort(axis=1)
# diff數組從小到大數據的下標 axis同上,默認是1
examples:
>>> a = np.array([[1, 2], [3, 4]])
>>> a.argsort()
array([[0, 1],
[0, 1]])
# 輸出數組行從小到大排序的原始數據座標;
# 如,index=0行的1,2 從小到大排序還是 1 2 ,1原來數組的下標是0; 2原來數組的下標是1 ; 因此返回數據的第一行是0 1

8.dict get
class_count.get(label, 0) 
# class_count 是一個 dict 。 從class_count找key = label對應的value,找到就返回value,找不到就返回0。

9.dict排序 sorted
sorted_class_count = sorted(class_count.iteritems(), key=operator.itemgetter(1), reverse=True)
# 對字典的value排序,返回一個list,list裏包含很多元組,這些元組就是之前dict的key-value對兒。
# class_count 是一個 dict 。 reverse=True致使value是從大到小的順序。
# sorted_class_count[][]

10.統計次數 bincount
>>> a = np.array([1, 2, 3, 2])
>>> np.bincount(a)
array([0, 1, 2, 1])
# 對數組中數據統計次數;返回數組下標是原始數組的值,返回數組的數據值是次數。
# 輸入數組使用中發現的約束條件:一維數組、 必須是int整形。

11.最大/小值max、最大/小值的下標argmax
12. np.random.uniform(start, end, size)
生成一個數值均勻分佈在start,end間的長度大小是size的數組(ndarray類型)。 注意是>= start && < end ,前閉後開。

13.np的flatten() vs ravel()
兩者都是把多維矩陣鋪平,以行爲主。區別是flatten返回的是原矩陣的拷貝;ravel是返回的是原矩陣的一種變換視圖,如果對返回值修改原矩陣也會跟着變化。
>>> a
array([[1, 2, 3],
[3, 2, 2],
[3, 4, 5],
[2, 3, 2]])
>>> b = a.flatten()
>>> b[0] = 0
>>> a #原矩陣沒有變化
array([[1, 2, 3],
[3, 2, 2],
[3, 4, 5],
[2, 3, 2]])
>>> c = a.ravel()
>>> c[0] = 0
>>> a #原矩陣變化
array([[0, 2, 3],
[3, 2, 2],
[3, 4, 5],
[2, 3, 2]])

14. np.mgrid 生成網格
# np.mgrid[start: end: size/seperate]
原本是生成一個[start, end)的表格,分割大小是seperate;第三個參數後面有j時表示生成一個[start, end]的表格,表格大小是size:
>>> np.mgrid[-10:10:5j] # 有‘j’。生成大小是5的分佈在[-10, 10]的表格
array([-10., -5., 0., 5., 10.])
>>> np.mgrid[-10:10:5] # 用5分割[-10, 10), 生成一個表格。
array([-10, -5, 0, 5])
>>> arr1, arr2 = np.mgrid[-10:10:5, -10:10:5j] # arr1,arr2鋪平 再stack ,可以很好的作爲二位座標數據。
>>> arr1
array([[-10., -10., -10., -10., -10.],
[ -5., -5., -5., -5., -5.],
[ 0., 0., 0., 0., 0.],
[ 5., 5., 5., 5., 5.]])
>>> arr2
array([[-10., -5., 0., 5., 10.],
[-10., -5., 0., 5., 10.],
[-10., -5., 0., 5., 10.],
[-10., -5., 0., 5., 10.]])

15. np.amin/amax == np.min/max
16.np.vstack(tuple) np.hstack(tuple) np.concatenate(tuple) np.stack()
tuple是一個arrays,就是由多個矩陣組成。
hstack(tuple) 是把多個矩陣以行拼接,等同於np.concatenate(tuple, axis=1)
vstack(tuple) 是把多個矩陣以列拼接,等同於np.concatenate(tuple, axis=0)
>>> a = np.array([[1,2,3], [2,3,4]])
>>> b = np.array([[2,3,9], [2,6,4]])
>>> np.hstack((a, b))
array([[1, 2, 3, 2, 3, 9],
[2, 3, 4, 2, 6, 4]])
>>> np.concatenate((a,b), axis = 1)
array([[1, 2, 3, 2, 3, 9],
[2, 3, 4, 2, 6, 4]])

>>> np.vstack((a, b))
array([[1, 2, 3],
[2, 3, 4],
[2, 3, 9],
[2, 6, 4]])
>>> np.concatenate((a,b), axis = 0)
array([[1, 2, 3],
[2, 3, 4],
[2, 3, 9],
[2, 6, 4]])


>>> np.stack((a, b), axis=0)
array([[[1, 2, 3],
[2, 3, 4]],

[[2, 3, 9],
[2, 6, 4]]])
>>> np.stack((a, b), axis=1)
array([[[1, 2, 3],
[2, 3, 9]],

[[2, 3, 4],
[2, 6, 4]]])

17. np.transpose(元組) 和 T
transpose適用於多維數組,它依賴與參數 元組 ,元組依賴與 shape。
T用於一/二維數組。

18、:, 代表一個維度的切片
eg:

img = io.imread(img_path)
data = np.zeros((3, img.shape[0], img.shape[1]), dtype=np.uint8)
data[0] = img[:, :, 0]
data[1] = img[:, :, 1]
data[2] = img[:, :, 2]




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