【Python】資料分析之numpy包
阿新 • • 發佈:2018-12-15
numpy使用示例
前言
numpy,全稱numeric python,是一個由多維陣列物件和用於處理陣列的例程集合組成的庫,是python資料分析中最基礎的工具。利用numpy,可以輕鬆地使用python達到matlab中的矩陣、線性代數等等運算。
下面給出一些示例的使用方法,作為入門。完整的API文件可以參考文末給出的參考資料。
示例程式碼
# coding=utf-8
# author=BebDong
# 10/14/18
import numpy as np
# 匯入線性方程組相關
from numpy.linalg import *
# ndarray 測試
def ndarray_test():
print("ndarray:")
# 普通列表
lst = [[1, 3, 5], [2, 4, 6]]
print(type(lst))
# numpy ndarray
np_lst = np.array(lst)
print(type(np_lst))
# 指定型別定義
np_lst = np.array(lst, dtype=np.float)
# 常用屬性:陣列行數和列數
print(np_lst.shape)
# 常用屬性:陣列維數
print(np_lst.ndim)
# 常用屬性:資料型別
print(np_lst.dtype)
# 常用屬性:元素大小
print(np_lst.itemsize)
# 常用屬性:陣列元素個數
print(np_lst.size)
# 常用陣列測試
def arrays_test():
print("常用陣列:")
# 0陣列,方便進行資料初始化
print(np.zeros([2, 3]))
# 1陣列
print (np.ones([3, 5]))
# 列印隨機數矩陣(0~1均勻分佈)
print(np.random.rand(2, 4))
# 列印隨機數
print(np.random.rand())
# 指定範圍列印隨機整數
print(np.random.randint(1, 10))
print(np.random.randint(1, 10, [3, 3]))
# 正態分佈隨機數
print(np.random.randn())
print(np.random.randn(2, 4))
# 在指定範圍產生隨機數
print(np.random.choice([10, 2, 8, 9]))
# beta分佈
print(np.random.beta(1, 10, 20))
# 其他常見分佈亦可……
# numpy常用操作
def operations():
# 產生等差數列,預設公差為1,可覆蓋
print(np.arange(1, 51, 5))
# 將產生的一維數列重定形為n維陣列
print(np.arange(1, 13, 2).reshape([3, -1]))
# numpy中array的算術操作將作用在每個元素身上
lst = np.arange(1, 11)
# 指數操作:item = e^item
print(np.exp(lst))
# item = 2^item
print(np.exp2(lst))
# item = sqrt(item)
print(np.sqrt(lst))
# item = sin(item)
print(np.sin(lst))
# item = ln(item)
print(np.log(lst))
# 單個數組進行不同深度的運算,axis指定進行到哪種深度,最大取值為維數-1
lst = np.array([[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[9, 10, 11, 12],
[13, 14, 15, 16]],
[[17, 18, 19, 20],
[21, 22, 23, 24]]
])
print(lst.sum())
print(lst.sum(axis=2))
print(lst.max())
print(lst.max(axis=1))
print(lst.min())
# 兩個陣列的運算,作用於對應位置元素
lst1 = np.array([1, 2, 3, 4])
lst2 = np.array([5, 6, 7, 4])
# 普通加減乘除,或者乘方
print(lst1 + lst2)
print(lst1 - lst2)
print(lst1 / lst2)
print(lst1 * lst2)
print(lst1 ** 2)
# 矩陣點乘
print(np.dot(lst1.reshape(2, 2), lst2.reshape(2, 2)))
# 陣列層面的運算:並集
print(np.concatenate((lst1, lst2), axis=0))
print(np.hstack((lst1, lst2)))
# 合併成一個數組,合併前的陣列作為結果陣列的一個元素
print(np.vstack((lst1, lst2)))
# 分割陣列
print(np.split(lst1, 4))
# 拷貝一個數組
print(np.copy(lst2))
# 線性方程組
def linearAlgebra():
# 單位矩陣
print(np.eye(3))
# 矩陣的逆
lst = np.array([[1, 2], [3, 4]])
print(inv(lst))
# 轉置
print(lst.transpose())
# 行列式
print(det(lst))
# 特徵值和特徵向量:第一個元素指特徵值,第二個指特徵向量
print(eig(lst))
# 解線性方程組:x+2y=5,3x+4y=7
result = np.array([[5.], [7.]])
print(solve(lst, result))
if __name__ == '__main__':
ndarray_test()
arrays_test()
operations()
linearAlgebra()
# 其他更多的操作
參考資料
numpy官網網站:http://www.numpy.org/
易百教程:https://www.yiibai.com/numpy