【Numpy】Numpy基礎練習全集

【Numpy】Numpy基礎練習全集

參考網站

https://www.runoob.com/numpy/numpy-tutorial.html

個人練習完整代碼

# NumPy練習
import numpy as np
# ---array---
# 一維數組
a = np.array([1, 2, 3])
print(a)
# 二維數組
a = np.array([[1, 2], [3, 4]])
print(a)
# ndmin指定生成的最小維度
a = np.array([1, 2, 3], ndmin=2)
print(a)
# ---dtype---
# dtype設置數據類型
a = np.array([1, 2, 3], dtype=complex)
print(a)
# 創建結構化數據類型
# int8, int16, int32, int64
# 四種數據類型可以使用字符串'i1', 'i2', 'i4', 'i8'代替
dt = np.dtype([('age', np.int8)])
print(dt)
# 將數據類型應用於ndarray對象
a = np.array([(10,), (20,), (30, )], dtype=dt)
print(a)
# 類型字段名可以用於存取實際的age列
print(a['age'])
# 存取student數據類型的數據
student = np.dtype([('name', 'S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50), ('xyz', 18, 75)], dtype=student)
print(a)
# ---ndim---
# ndim返回數組的維數
# 關於arange和reshape在後續有體現
a = np.arange(24)
print(a.ndim)
b = a.reshape(2, 4, 3)
print(b.ndim)
# ---shape---
# shape返回數組的維度
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)
# 調整數組的大小
a.shape = (3, 2)
print(a)
# ---reshape---
# 用reshape調整數組大小
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.reshape(3, 2)
print(b)
# ---empty---
# 用empty()方法創建指定形狀(shape)、數據類型(dtype)且未初始化的數組
x = np.empty([3, 2], dtype=int)
print(x)
# ---zeros---
# 創建指定大小的數組,數組元素以0來填充
y = np.zeros((2, 2), dtype=[('x', 'i4'), ('y', 'i4')])
print(y)
# ---ones---
# 創建指定大小的數組,數組元素以1來填充
y = np.ones((2, 2), dtype=[('x', 'i4'), ('y', 'i4')])
print(y)
# ---asarray---
# 從已有的數組創建數組
x = [1, 2, 3]
# 可接受任意形式的輸入參數
# 列表, 列表的元組, 元組, 元組的元組, 元組的列表,多維數組
a = np.asarray(x)
print(a)
# ---frombuffer---
# 實現動態數組
s = b'Hello World'
# buffer是字符串的時候
# Python3默認str是Unicode類型
# 所以要轉成bytestring, 在原str前加上b
a = np.frombuffer(s, dtype='S1')
print(a)
# ---fromiter---
list = range(5)
it = iter(list)
# 使用迭代器創建ndarray
x = np.fromiter(it, dtype=float)
print(x)
# ---arange---
# 從數值範圍創建數組
# start stop(不包含) step
x = np.arange(10, 20, 2)
print(x)
# ---linspace---
# 等差數列構建一維數組
# np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
a = np.linspace(1, 10, 10)
print(a)
# endpoint=False時不包含最終點
a = np.linspace(1, 10, 10, endpoint=False, retstep=True)
# retstep=True時,生成的結果顯示間距
print(a)
# ---logspace---
# 等比數列構建一維數組
# np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
a = np.logspace(0, 9, 10, base=2)
print(a)
# ---slice---
# 從原數組切割出一個新數組
a = np.arange(10)
s = slice(2, 7, 2)
print(a[s])
# 切片操作 start:stop:step
b = a[2:7:2]
print(b)
# 冒號":"的解釋
# 如果只放置一個參數如[2], 將返回與該索引相對應的單個元素
# 如果爲[2:], 表示從該索引開始以後的所有項都將被提取
# 如果使用了兩個參數, 如[2:7], 則提取兩個索引(不包括停止索引)之間的項
# 多維數組同樣適用上述索引提取方法
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print(a[1:])
# 省略號"..."的解釋
# 使選擇元組的長度與數組的維度相同
# 顯示第二列元素
# "..."選擇所有行
# 1取每行第二個元素
print(a[..., 1])
# 顯示第二行元素
# 1選擇第二行
# "..."選擇該行所有元素
print(a[1, ...])
# 同上 選擇第二列及剩下的所有元素
print(a[..., 1:])
# NumPy高級索引
# 整數數組索引
# 獲取數組中(0,0)、(1,1)和(2,0)位置處的元素
x = np.array([[1, 2],
             [3, 4],
             [5, 6]])
y = x[[0, 1, 2],
      [0, 1, 0]]
print(y)
# 獲取數組四個角的元素
rows = np.array([[0, 0], [2, 2]])
cols = np.array([[0, 1], [0, 1]])
y = x[rows, cols]
print(y)
# 藉助切片
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
# 取從第二行第二列開始的所有元素
b = a[1:, 1:]
print(b)
# 取從第二列開始的所有元素
c = a[..., 1:]
print(c)
# 布爾索引
print(a[a > 5])
# 使用~過濾NaN
a = np.array([np.nan, 1, 2, np.nan, 3])
print(a[~np.isnan(a)])
# 過濾非複數元素
a = np.array([1, 2+6j, 5, 3.5+5j])
print(a[np.iscomplex(a)])
# 花式索引
# 傳入順序索引數組
x = np.arange(32).reshape((8, 4))
print(x[[4, 2, 1, 7]])
# 傳入倒序索引數組
print(x[[-4, -2, -1, -7]])
# ---np.ix_---
# 傳入多個索引數組
print(x[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])])
# 廣播Broadcast
a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
# 兩數組形狀相同 對應位相乘
c = a * b
print(c)
# 兩數組形狀不同
a = np.array([[0, 0, 0],
              [10, 10, 10],
              [20, 20, 20],
              [30, 30, 30]])
b = np.array([1, 2, 3])
# 重複b的各個維度
print(a + b)
# 等效於把數組b在二維上重複4再運算
# tile()函數將原矩陣橫向、縱向地複製
bb = np.tile(b, (4, 1))
print(a + bb)
a = np.ones((2, 3))
aa = np.tile(1., (2, 3))
# a等效於aa
print(a)
print(aa)
# NumPy數組操作
# 修改數組形狀
# ---reshape---
a = np.arange(8)
a = a.reshape((4, 2))
print(a)
# ---flat---
# 數組元素迭代器
for element in a.flat:
    print(element)
# ---flatten---
# 深拷貝數組
print(a.flatten())
# C style按行展開
print(a.flatten(order='C'))
# Fortran style按列展開
print(a.flatten(order='F'))
a.flatten()[1] = 999
# 不影響原來數組
print(a)
# ---ravel---
# 淺拷貝數組
print(a.ravel())
print(a.ravel(order='C'))
print(a.ravel(order='F'))
a.ravel()[1] = 999
# 影響原來數組
print(a)
# 翻轉數組
# ---transpose---
# 對換數組的維度
a = np.arange(12).reshape(3, 4)
print(np.transpose(a))
# ---T---
# 轉置數組 效果與transpose類似
print(a.T)
# ---rollaxis---
# 向後滾動特定的軸到一個特定的位置
# arr axis start
# 數組 要滾動的軸 要滾動到的位置(默認爲0)
a = np.arange(8).reshape((2, 2, 2))
print(np.rollaxis(a, 2))
print(np.rollaxis(a, 2, 1))
# ---swapaxes---
# 交換數組的兩個軸
# arr axis1 axis2
# 數組 對應第一個軸的整數 對應第二個軸的整數
print(np.swapaxes(a, 2, 0))
# 修改數組維度
# ---broadcast---
# 返回一個對象
# 該對象封裝了將一個數組廣播到另一個數組的結果
x = np.array([[1],
              [2],
              [3]])
y = np.array([4, 5, 6])
b =np.broadcast(x, y)
r, c = b.iters
print(next(r), next(c))
print(next(r), next(c))
print(x + y)
# ---squeeze---
# 從給定數組的形狀中刪除一維的條目
# 只能刪除形狀中的單維度條目
x = np.arange(9).reshape((1, 3, 3))
print(x)
print(x.shape)
y = np.squeeze(x)
print(y)
print(y.shape)
y = y.reshape((1, 9))
y = np.squeeze(y)
print(y)
print(y.shape)
# 數組元素的添加
# ---append---
# 在數組的末尾添加值
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
# 返回一維數組
print(np.append(a, [7, 8, 9]))
# 沿軸0添加元素
print(np.append(a, [[7, 8, 9]], axis=0))
# 沿軸1添加元素
print(np.append(a, [[5, 5, 5], [7, 8, 9]], axis=1))
# 插入值
# ---insert---
a = np.array([[1, 2], [3, 4], [5, 6]])
print(a)
# arr obj values axis
# 數組 插入位置 插入值 沿軸
print(np.insert(a, 3, [11, 12]))
# 沿軸0插入元素
print(np.insert(a, 3, [11, 12], axis=0))
# 數組元素的刪除
# ---delete---
a = np.arange(12).reshape(3, 4)
print(a)
# 默認返回一維數組
print(np.delete(a, 5))
print(a)
# 刪除第二行
print(np.delete(a, 1, axis=0))
# 刪除第二列
print(np.delete(a, 1, axis=1))
# 刪除切片選定元素
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(np.delete(a, np.s_[::2]))
# 刪除重複元素
a = np. array([5, 2, 6, 7, 5, 6, 8, 2, 9])
print(a)
# ---unique---
# 去重
u = np.unique(a)
print(u)
# 去重數組的索引數組
# 返回新列表元素在舊列表中的位置 並以列表形式存儲
u, indices = np.unique(a, return_index=True)
print(indices)
# 返回舊列表元素在新列表中的位置 並以列表形式存儲
u, indices = np.unique(a, return_inverse=True)
print(indices)
# 返回去重數組中的元素在原數組中的出現次數
u, indices = np.unique(a, return_counts=True)
print(indices)
# ---around---
a = np.array([1., 5.55, 123, 0.567, 25.532])
print(a)
# 返回指定數字的四捨五入值
print(np.around(a))
# decimal
# 舍入的小數位數 默認值爲0
# 如果爲負整數 將四捨五入到小數點左側的位置
print(np.around(a, decimals=1))
print(np.around(a, decimals=-1))
# ---floor---
# 向下取整
a = np.array([-1.7, 1.5, -0.2, 0.6, 10])
print(a)
print(np.floor(a))
# 向上取整
print(np.ceil(a))
# 算數函數
a = np.arange(9).reshape(3, 3)
print(a)
b = np.array([10, 11, 12])
print(b)
# ---add---
print(np.add(a, b))
# ---subtract---
print(np.subtract(a, b))
# ---multiply---
print(np.multiply(a, b))
# ---divide---
print(np.divide(a, b))
# ---reciprocal---
# 取元素倒數
a = np.array([0.25, 1.33, 1, 100])
print(np.reciprocal(a))
# ---power---
# 冪
a = np.array([10, 100, 1000])
# 求二次方
print(np.power(a, 2))
# 求相應冪
print(np.power(a, [1, 2, 3]))
b = np.array([3, 2, 1])
print(np.power(a, b))
# ---mod---
# ---remainder---
# 相除取餘
a = np.array([10, 20, 30])
b = np.array([3, 5, 7])
print(np.mod(a, b))
print(np.remainder(a, b))
# ---mean---
# 返回數組中元素的算數平均值
# 如果提供了軸 則沿軸計算
# 算術平均值是沿軸的元素的總和除以元素的數量
a = np.array([[1, 2, 3],
              [3, 4, 5],
              [4, 5, 6]])
print(a)
print(np.mean(a))
print(np.mean(a, axis=0))
print(np.mean(a, axis=1))
# ---average---
# 根據在另一個數組中給出的各自的權重計算數組中元素的加權平均值
# 可以接受一個軸參數 如果沒有指定軸 則數組會被展開
a = np.array([1, 2, 3, 4])
print(a)
print(np.average(a))
wts = np.array([4, 3, 2, 1])
print(np.average(a, weights=wts))
# returned返回權重的和
print(np.average(a, weights=wts, returned=True))
a = np.arange(6).reshape(3, 2)
print(a)
# 指定計算的軸
wt = np.array([3, 5])
print(np.average(a, axis=1, weights=wt))
# ---std---
# 標準差
print(np.std([1, 2, 3, 4]))
# ---var---
# 方差
print(np.var([1, 2, 3, 4]))

a = np.array([[3, 7, 5],
              [8, 4, 3],
              [2, 4, 9]])
print(a)
# ---amax---
# 計算數組中的元素沿指定軸的最大值
print(np.amax(a, axis=1))
# ---amin---
# 計算數組中的元素沿指定軸的最小值
print(np.amin(a, axis=1))
# ---ptp---
# 計算數組中元素最大值與最小值的差
print(np.ptp(a, axis=1))
# ---median---
# 計算數組中元素的中位數
print(np.median(a, axis=1))
# 三角函數
a = np.array([0, 30, 45, 60, 90])
# ---sin---
# 通過乘pi/180轉化爲弧度
print(np.sin(a*np.pi/180))
# ---cos---
print(np.cos(a*np.pi/180))
# ---tan---
print(np.tan(a*np.pi/180))
# ---arcsin---
# 反三角函數 其他類似
sin = np.sin(a*np.pi/180)
inv = np.arcsin(sin)
print(inv)
# ---degrees---
# 將弧度轉換爲角度
print(np.degrees(inv))
# ---nonzero---
# 返回輸入數組中非零元素的索引
a = np.array([[30, 40, 0],
              [0, 20, 10],
              [50, 0, 60]])
print(a)
b = np.nonzero(a)
print(b)
# 使用這些索引來獲取滿足條件的元素
print(a[b])
# ---where---
# 返回輸入數組中滿足給定條件的元素的索引
b = np.where(a > 10)
print(b)
print(a[b])
# ---extract---
# 根據某個條件從數組中抽取元素 返回滿條件的元素
x = np.arange(9).reshape(3, 3)
print(x)
# 定義選擇條件
condition = np.mod(x, 2) == 0
print(condition)
print(np.extract(condition, x))
# 矩陣庫Matrix
import numpy.matlib
# ---empty---
# 返回新矩陣 填充隨機數據
print(np.matlib.empty((2, 2)))
# ---zeros---
# 填充爲0
print(np.matlib.zeros((2, 2)))
# ---ones---
# 填充爲1
print(np.matlib.ones((2, 2)))
# ---eye---
# 返回對角元素爲1其他位置爲0的矩陣
# n返回矩陣的行數 M返回矩陣的列數 k對角線的索引
print(np.matlib.eye(n=3, M=4, k=0, dtype=float))
# 返回給定大小的單位矩陣
# ---identity---
print(np.matlib.identity(5, dtype=float))
# ---rand---
# 返回給定大小矩陣 數據隨機填充
print(np.matlib.rand(3, 3))
# ---matrix---
# 得到一個矩陣
i = np.matrix('1, 2; 3, 4')
print(i)
# ---asarray---
# 返回ndarray數組
j = np.asarray(i)
print(j)
# ---asmatrix---
# 返回矩陣
k = np.asmatrix(j)
print(k)
# ---dot---
# 兩個數組的點積 即元素對應相乘
a = np.array([[1, 2],
              [3, 4]])
b = np.array([[11, 12],
              [13, 14]])
print(np.dot(a, b))
a = np.array([[1, 2],
              [3, 4]])
b = np.array([[11, 12],
              [13, 14]])
print(np.dot(a, b))
# ---matmul---
# 返回兩個數組的矩陣乘積
# 二維數組時與dot()作用相同都是計算矩陣乘法
# 如果大於二維
# 則將其視爲存在於最後兩個索引的矩陣的棧
# 並進行相應廣播
print(np.matmul(a, b))
# ---linalg.det---
# 返回矩陣的行列式
a = np.array([[1, 2],
              [3, 4]])
print(np.linalg.det(a))
# ---linalg.inv---
# 返回矩陣的乘法逆矩陣
x = np.array([[1, 2],
              [3, 4]])
y = np.linalg.inv(x)
print(x)
print(y)
print(np.dot(x, y))
# ---linalg.solve---
# 解線性方程
# x + y + z = 6
# 2y + 5z = -4
# 2x + 5y - z = 27
a = np.array([[1, 1, 1],
              [0, 2, 5],
              [2, 5, -1]])
b = np.array([[6],
              [-4],
              [27]])
x = np.linalg.solve(a, b)
print(x)
# AX = B
# A^(-1)AX = A^(-1)B
# X = A^(-1)B
print(np.dot(np.linalg.inv(a), b))
# ---inner---
# 返回向量內積
a = np.array([[1, 2],
              [3, 4]])
b = np.array([[11, 12],
              [13, 14]])
print(np.inner(a, b))
# 1*11+2*12, 1*13+2*14
# 3*11+4*12, 3*13+4*14
# ---vdot---
# 返回向量點積
# 1*11+2*12+3*13+4*14
print(np.vdot(a, b))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章