Numpy_05 數據處理

github博客傳送門
csdn博客傳送門python

Numpy系列

Numpy_01 建立 指定數據類型 查看維度和數據類型 簡單的數學運算
Numpy_02 索引和切片
Numpy_03 轉置和軸對換
Numpy_04 通用函數
Numpy_05 數據處理
Numpy_06 數組的文件輸入輸出 線性代數git

利用數組進行數據處理

import numpy as np

points = np.arange(-5, 5, 1)  # 100個等間距點
xs, ys = np.meshgrid(points, points)  # 接收兩個一維數組 返回兩個二維數組
print('xs:\n', xs)  # 返回一個 數組元素個數這麼多行的二維數組 內容和一維的數組同樣
print('ys:\n', ys)  # 返回一個 數組元素個數這麼多汗的二維數組 內容爲原數組的一個元素爲一行
print('-------------------------------')
# 兩點間距離公式
z = np.sqrt(xs ** 2 + ys ** 2)  # 對 xs 的每一個元素平方加上 ys 的每一個元素平方 再開方並返回
print(z)

將條件邏輯表述爲數組運算

xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])

result = [(x if c else y)
          for x, y, c in zip(xarr, yarr, cond)]  # 若是c爲True返回x的值 不然返回y的值
print(result)


# 同上功能
result = np.where(cond, xarr, yarr)
print(result)

arr = np.random.randn(4, 4)  # 隨機生成一個 4x4的矩陣
print(arr)  # 打印這個矩陣
print(arr > 0)  # 判斷arr裏的值是否 > 0 返回True 不然返回 False  最後返回一個 布爾類型的數組
print(np.where(arr > 0, 2, -2))  # 將全部正值 替換爲2 不然替換爲 -2
print(np.where(arr > 0, 2, arr))  # 用 2 替換全部 arr的正值

數學和統計方法

求平均值,求和github

arr = np.random.randn(5, 4)
print(arr)
print(arr.mean())  # 求平均值
print(np.mean(arr))  # 求平均值
print(arr.sum())  # 求和

選擇高維數組的軸數組

# mean和sum這類的函數能夠接受一個axis選項參數,用於計算該軸向上的統計值,最終結果是一個少一維的數組:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr)
# arr.mean(1)是「計算行的平均值」,arr.sum(0)是「計算每列的和」。
print(arr.mean(axis=1))
print(arr.sum(axis=0))

累加函數dom

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])
print(arr.cumsum())   # 累加函數 第一項等於前一項和 第二項等於前兩項和 第三項等前三項和...

累積函數函數

arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
print(arr)
print(arr.cumsum(axis=0))  # 累加函數(如cumsum)返回的是一樣大小的數組,可是會根據每一個低維的切片沿着標記軸計算部分聚類
print(arr.cumprod(axis=1))  # 累積函數

下面列出經常使用數據處理的聚合函數的表:
第一張
第二張
第三張測試

列出了所有的基本數組統計方法.net

arr = np.random.randn(100)
print((arr > 0).sum()) # .sum()方法疑是失效

bools = np.array([False, False, True, False])
print(bools.any()) # 測試數組中是否存在一個或多個True
print(bools.all()) # 檢查數組中是否全部的值都爲 True
# 以上兩個方法也能用於非布爾類型數組,全部非0元素將會被看成True

sort()函數3d

# 例
a = np.array([[3, 7], [9, 1]])
print('咱們的數組是:')
print(a)
print('\n')
print('調用sort()函數:')
print(np.sort(a))
print('\n')
print('沿軸 0 排序:')
print(np.sort(a, axis=0))
print('\n')

# 在sort函數中排序字段
dt = np.dtype([('name', 'S10'), ('age', int)])
a = np.array([('raju', 21), ('anil', 25), ('ravi', 17), ('amar', 27)], dtype=dt)
print('咱們的數組是:')
print(a)
print('\n')
print('按name排序:')
print(np.sort(a, order='name'))

argsort()函數code

# 沒看懂 間接排序
# numpy.argsort()
# numpy.argsort()函數對輸入數組沿給定軸執行間接排序,並使用指定排序類型返回數據的索引數組。 這個索引數組用於構造排序後的數組。
arr = np.random.randn(5, 3)
print(arr)

arr.sort(1)
print(arr)

x = np.array([3, 1, 2])
print('咱們的數組是:')
print(x)
print('\n')
print('對 x 調用 argsort() 函數:')
y = np.argsort(x)
print(y)
print('\n')
print('以排序後的順序重構原數組:')
print(x[y])
print('\n')
print('使用循環重構原數組:')
for i in y:
print(x[i])

函數使用鍵序列執行間接排序。 鍵能夠看做是電子表格中的一列。 該函數返回一個索引數組,使用它能夠得到排序數據。

注意,最後一個鍵剛好是 sort 的主鍵。
nm = ('raju', 'anil', 'ravi', 'amar')
dv = ('f.y.', 's.y.', 's.y.', 'f.y.')
ind = np.lexsort((dv, nm))
print('調用 lexsort()函數:')
print(ind)
print('\n')
print('使用這個索引來獲取排序後的數據:')
print([nm[i] + ',' + dv[i] for i in ind])

惟一化以及其它的集合邏輯

NumPy提供了一些針對一維ndarray的基本集合運算。最經常使用的可能要數np.unique了,它用於找出數組中的惟一值並返回已排序的結果:

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
print(np.unique(names))  # 將names數組惟一化
ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])
print(np.unique(ints))  # 將ints數組惟一化
print(sorted(set(names)))  # 純Python實現

另外一個函數np.in1d用於測試一個數組中的值在另外一個數組中的成員資格,返回一個布爾型數組:

values = np.array([6, 0, 0, 3, 2, 5, 6])
print(np.in1d(values, [2, 3, 6]))
相關文章
相關標籤/搜索