【Numpy】學習筆記1
文章目錄
一、概述
numpy 支援大量高維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫。機器學習涉及到大量對陣列的變換和運算。
二、基礎
import numpy as np
print(np.__version__)
輸出結果
1.14.3
1、建立陣列
NumPy 的主要物件是多維陣列 Ndarray。在 NumPy 中維度(dimensions)叫做軸(axes),軸的個數叫做秩(rank)。
下面的陣列的秩為 2。第一個維度(軸)長度為 2,第二個維度(軸)長度為 3。
[[1., 2., 3.],
[4., 5., 6.]]
(1)通過 list 建立陣列
## 一維陣列
print(np.array([1, 2, 3]))
## 二維陣列
print(np.array([[1, 2, 3], [4, 5, 6]])
輸出結果
array([1, 2, 3])
array([[1, 2, 3],
[4, 5, 6]])
(2)特殊陣列
zeros()、ones()、arange()、eye()、linespace()、random.rand()、random.randint()、fromfunction()
## 全為 0 的二維陣列
np.zeros((3, 5))
# array([[0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.],
# [0., 0., 0., 0., 0.]])
## 全為 1 的三維陣列
np.ones((2, 3, 4))
# array([[[1., 1., 1., 1.],
# [1., 1., 1., 1.],
# [1., 1., 1., 1.]],
# [[1., 1., 1., 1.],
# [1., 1., 1., 1.],
# [1., 1., 1., 1.]]])
## 一維等差陣列
np.arange(5)
# array([0, 1, 2, 3, 4])
## 二維等差陣列
np.arange(6).reshape(2, 3)
# array([[0, 1, 2],
# [3, 4, 5]])
## 單位矩陣(二維陣列)
np.eye(3)
# array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
## 等間隔一維陣列:[1, 10]區間上等間隔的六個數
np.linspace(1, 10, num=6)
# array([ 1. , 2.8, 4.6, 6.4, 8.2, 10. ])
## 二維隨機陣列
np.random.rand(2, 3)
# array([[0.52506848, 0.53357141, 0.53381268],
# [0.16647792, 0.22610891, 0.62271866]])
## 二維隨機整數陣列(數值小於 5)
np.random.randint(5, size=(2, 3))
# array([[2, 0, 4],
# [0, 3, 0]])
## 自定義函式建立陣列:建立大小為(3,5)的資料
np.fromfunction(lambda i, j : i + j, (3, 5))
# array([[0., 1., 2., 3., 4.],
# [1., 2., 3., 4., 5.],
# [2., 3., 4., 5., 6.]])
2、陣列運算
(1)基礎運算(一維)
相對應元素之間進行運算。
## 建立兩個一維陣列,a、b
a = np.array([10, 20, 30, 40, 50])
b = np.arange(1, 6)
a, b
# (array([10, 20, 30, 40, 50]), array([1, 2, 3, 4, 5]))
print(a + b)
print(a - b)
print(a * b)
print(a / b)
# array([11, 22, 33, 44, 55])
# array([ 9, 18, 27, 36, 45])
# array([ 10, 40, 90, 160, 250])
# array([10., 10., 10., 10., 10.])
(2)基礎運算(二維)
- 重點:矩陣乘法、轉置、逆矩陣
## 建立二維矩陣:A、B
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
A, B
# (array([[1, 2],
# [3, 4]]), array([[5, 6],
# [7, 8]]))
print(A + B)
print(A - B)
# array([[ 6, 8],
# [10, 12]])
# array([[-4, -4],
# [-4, -4]])
## 矩陣元素間的乘法
print(A * B)
# array([[ 5, 12],
# [21, 32]])
## 矩陣乘法運算
print(np.dot(A, B))
# array([[19, 22],
# [43, 50]])
## 如果使用 np.mat 將二維陣列準確定義為矩陣,就可以直接使用 * 完成矩陣乘法計算
print(np.mat(A) * np.mat(B))
# matrix([[19, 22],
# [43, 50]])
## 數乘矩陣
print(A * 2)
# array([[2, 4],
# [6, 8]])
## 矩陣的轉置
print(A.T)
# array([[1, 3],
# [2, 4]])
## 矩陣求逆
print(np.linalg.inv(A))
# array([[-2. , 1. ],
# [ 1.5, -0.5]])
3、數學函式
print(a)
# [10 20 30 40 50]
np.sin(a) # 三角函式
np.exp(a) # 指數
np.sqrt(a) # 開方運算
np.power(a, 3) # 立方運算
# array([-0.54402111, 0.91294525, -0.98803162, 0.74511316, -0.26237485])
# array([2.20264658e+04, 4.85165195e+08, 1.06864746e+13, 2.35385267e+17, 5.18470553e+21])
# array([3.16227766, 4.47213595, 5.47722558, 6.32455532, 7.07106781])
# array([ 1000, 8000, 27000, 64000, 125000])
4、陣列切片和索引
## 一維切片
a = np.array([1, 2, 3, 4, 5])
a[0], a[-1]
# (1, 5)
print(a[0:2], a[:-1])
# (array([1, 2]), array([1, 2, 3, 4]))
## 二維切片
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
## 第一行、最後一行
print(a[0], a[-1])
## 第二列
print(a[:, 1])
## 第 2,3 行
print(a[1:3, :])
5、陣列形狀操作
(1)形變
- reshape()方法:改變陣列形狀(但不改變原始陣列)
- ravel()方法:將多維陣列拉成一維陣列。
a = np.random.random((3, 2))
print(a)
# [[0.32136021 0.28243107]
# [0.98636992 0.96468233]
# [0.02745087 0.75451614]]
print(a.shape) # 陣列形狀:(3, 2)
print(a.reshape(2,3)) # 改變陣列形狀=》(2, 3)
print(a)
# array([[0.32136021, 0.28243107, 0.98636992],
# [0.96468233, 0.02745087, 0.75451614]])
# array([[0.32136021, 0.28243107],
# [0.98636992, 0.96468233],
# [0.02745087, 0.75451614]])
## 展平陣列,即拉成一維陣列
print(a.ravel())
# array([0.32136021, 0.28243107, 0.98636992, 0.96468233, 0.02745087, 0.75451614])
(2)陣列的拼合
a = np.random.randint(10, size=(3, 4))
b = np.random.randint(10, size=(3, 4))
a, b
# (array([[1, 1, 4, 0],
# [2, 2, 4, 3],
# [1, 8, 4, 3]]), array([[2, 9, 1, 1],
# [7, 9, 0, 2],
# [6, 5, 0, 9]]))
## 垂直拼合陣列
print(np.vstack((a, b)))
## 水平拼合陣列
print(np.hstack((a, b)))
# array([[1, 1, 4, 0],
# [2, 2, 4, 3],
# [1, 8, 4, 3],
# [2, 9, 1, 1],
# [7, 9, 0, 2],
# [6, 5, 0, 9]])
# array([[1, 1, 4, 0, 2, 9, 1, 1],
# [2, 2, 4, 3, 7, 9, 0, 2],
# [1, 8, 4, 3, 6, 5, 0, 9]])
## 沿橫軸分割陣列
print(np.hsplit(a, 4))
## 沿縱軸分割陣列
print(np.vsplit(a, 3))
# [array([[1],
# [2],
# [1]]), array([[1],
# [2],
# [8]]), array([[4],
# [4],
# [4]]), array([[0],
# [3],
# [3]])]
# [array([[1, 1, 4, 0]]), array([[2, 2, 4, 3]]), array([[1, 8, 4, 3]])]
6、陣列排序
axis = 0 代表列;
axis = 1 代表行。
a = np.array(([1, 4, 3], [6, 2, 9], [4, 7, 2]))
## 返回每列最大值
print(np.max(a, axis = 0))
## 返回每行最小值
print(np.min(a, axis = 1))
## 返回每列最大值索引
print(np.argmax(a, axis = 0))
## 返回每行最小值索引
print(np.argmin(a, axis = 1))
# array([6, 7, 9])
# array([1, 2, 2])
# array([1, 2, 1])
# array([0, 1, 2])
7、陣列統計
## 統計陣列各列的中位數
print(np.median(a, axis = 0))
## 各行的算術平均值
print(np.mean(a, axis = 1))
## 各列的加權平均值
print(np.average(a, axis = 0))
## 各行的方差
print(np.var(a, axis = 1))
## 各列的標準偏差
print(np,std(a, axis = 0))
# array([4., 4., 3.])
# array([2.66666667, 5.66666667, 4.33333333])
# array([3.66666667, 4.33333333, 4.66666667])
# array([1.55555556, 8.22222222, 4.22222222])
# array([2.05480467, 2.05480467, 3.09120617])
三、進階(以題的形式)
1、建立一個 5x5 的二維陣列,其中邊界值為1,其餘值為0
Z = np.ones((5, 5))
Z[1:-1, 1:-1] = 0
print(Z)
# array([[1., 1., 1., 1., 1.],
# [1., 0., 0., 0., 1.],
# [1., 0., 0., 0., 1.],
# [1., 0., 0., 0., 1.],
# [1., 1., 1., 1., 1.]])
2、使用數字 0 將一個全為 1 的 5x5 二維陣列包圍
==》np.pad() 方法
Z = np.ones((5, 5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values = 0)
print(Z)
# array([[0., 0., 0., 0., 0., 0., 0.],
# [0., 1., 1., 1., 1., 1., 0.],
# [0., 1., 1., 1., 1., 1., 0.],
# [0., 1., 1., 1., 1., 1., 0.],
# [0., 1., 1., 1., 1., 1., 0.],
# [0., 1., 1., 1., 1., 1., 0.],
# [0., 0., 0., 0., 0., 0., 0.]])
3、建立一個 5x5 的二維陣列,並設定值 1, 2, 3, 4 落在其對角線下方
==》np.diag(),其中k表示元素的位置,k=0表示對角線,k>0表示對角線上方,k<0表示對角線下方,k的大小表示與對角線的“距離”(決定陣列的大小)
Z = np.diag(1 + np.arange(4), k=-3)
print(Z)
# array([[0, 0, 0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0, 0, 0],
# [0, 0, 0, 0, 0, 0, 0],
# [1, 0, 0, 0, 0, 0, 0],
# [0, 2, 0, 0, 0, 0, 0],
# [0, 0, 3, 0, 0, 0, 0],
# [0, 0, 0, 4, 0, 0, 0]])
Z = np.diag(1 + np.arange(4), k=0)
print(Z)
# array([[1, 0, 0, 0],
# [0, 2, 0, 0],
# [0, 0, 3, 0],
# [0, 0, 0, 4]])
4、建立一個 10x10 的二維陣列,並使得 1 和 0 沿對角線間隔放置
Z = np.zeros((10, 10), dtype=int)
Z[1::2, ::2] = 1
Z[::2, 1::2] = 1
print(Z)
# array([[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
# [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
# [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
# [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
# [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
# [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
# [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
# [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
# [0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
# [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]])
5、建立一個 0-10 的一維陣列,並將 (1, 9] 之間的數全部反轉成負數
Z = np.arange(11)
Z[(1 < Z) & (Z <= 9)] *= -1
print(Z)
# [ 0 1 -2 -3 -4 -5 -6 -7 -8 -9 10]
6、找出兩個一維陣列中相同的元素
Z1 = np.random.randint(0, 10, 15)
Z2 = np.random.randint(0, 10, 10)
print("Z1:", Z1)
print("Z2:", Z2)
np.intersect1d(Z1, Z2)
# Z1: [3 8 5 5 1 0 5 2 3 8 3 1 4 0 4]
# Z2: [2 8 4 8 3 7 3 1 5 3]
# array([1, 2, 3, 4, 5, 8])
7、找出兩個一維陣列中相同的元素
Z = np.zeros((5, 5))
Z += np.arange(1, 6)
print(Z)
# [[1. 2. 3. 4. 5.]
# [1. 2. 3. 4. 5.]
# [1. 2. 3. 4. 5.]
# [1. 2. 3. 4. 5.]
# [1. 2. 3. 4. 5.]]
8、時間計算
yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
today = np.datetime64('today', 'D')
tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
print('Yesterday: ', yesterday)
print('Today: ', today)
print('Tomorrow: ', tomorrow)
# Yesterday: 2019-01-02
# Today: 2019-01-03
# Tomorrow: 2019-01-04
9、提取一個隨機陣列的整數部分
Z = np.random.uniform(0, 10, 10)
print("原始值: ", Z)
print("方法 1:", Z - Z % 1) # 減去小數部分
print("方法 2:", np.floor(Z)) # 返回輸入值的下限,即輸入引數的最大整數。
print("方法 3:", np.ceil(Z) - 1) # 返回輸入值的上限
print("方法 4:", Z.astype(int)) # 型別轉換
print("方法 5:", np.trunc(Z)) # 擷取
# 原始值: [5.56601634 4.77164344 3.08836714 3.30325796 6.15169633 9.79808824 4.38637838 6.39368379 9.62265927 2.32704462]
# 方法 1: [5. 4. 3. 3. 6. 9. 4. 6. 9. 2.]
# 方法 2: [5. 4. 3. 3. 6. 9. 4. 6. 9. 2.]
# 方法 3: [5. 4. 3. 3. 6. 9. 4. 6. 9. 2.]
# 方法 4: [5 4 3 3 6 9 4 6 9 2]
# 方法 5: [5. 4. 3. 3. 6. 9. 4. 6. 9. 2.]
10、建立一個長度為 5 的等間隔一維陣列,其值域範圍從 0 到 1,但是不包括 0 和 1
- numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
- 在指定的間隔
[start, stop]
內返回均勻間隔的數字。其中,endpoint為True表示包括stop,False表示不包括;
Z1 = np.linspace(0,1,6,endpoint=False)[1:]
Z2 = np.linspace(0, 1, 7)[1:-1]
print(Z1)
print(Z2)
# array([0.16666667, 0.33333333, 0.5 , 0.66666667, 0.83333333])
# array([0.16666667, 0.33333333, 0.5 , 0.66666667, 0.83333333])
11、建立一個 3x3 的二維陣列,並將列按升序排序:
- 按列排序:
axis = 0
Z = np.array([[7, 4, 3], [3, 1, 2], [4, 2, 6]])
Z.sort(axis = 0)
Z
# array([[3, 4, 7],
# [1, 2, 3],
# [2, 4, 6]])
12、列印每個 NumPy 標量型別的最小值和最大值
- np.iinfo(dtype):dtype 型別(需為整型)的資訊
- np.finfo(dtype):dtype 型別(需為浮點型)的資訊
for dtype in [np.int8, np.int32, np.int64]:
print("The minimum value of {}: ".format(dtype), np.iinfo(dtype).min)
print("The maximum value of {}: ".format(dtype), np.iinfo(dtype).max)
for dtype in [np.float32, np.float64]:
print("The minimum value of {}: ".format(dtype), np.finfo(dtype).min)
print("The maximum value of {}: ".format(dtype), np.finfo(dtype).max)
# The minimum value of <class 'numpy.int8'>: -128
# The maximum value of <class 'numpy.int8'>: 127
# The minimum value of <class 'numpy.int32'>: -2147483648
# The maximum value of <class 'numpy.int32'>: 2147483647
# The minimum value of <class 'numpy.int64'>: -9223372036854775808
# The maximum value of <class 'numpy.int64'>: 9223372036854775807
# The minimum value of <class 'numpy.float32'>: -3.4028235e+38
# The maximum value of <class 'numpy.float32'>: 3.4028235e+38
# The minimum value of <class 'numpy.float64'>: -1.7976931348623157e+308
# The maximum value of <class 'numpy.float64'>: 1.7976931348623157e+308
13、將 float32 轉換為整型:astype()
Z= np.arange(10, dtype=np.float32)
print(Z)
Z = Z.astype(np.int32, copy=False)
Z
# [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int32)
14、從隨機一維陣列中找出距離給定數值(0.5)最近的數
- flat 陣列的迭代器
Z = np.random.uniform(0, 1, 20)
z = 0.5
m = Z.flat[np.abs(Z-z).argmin()]
m
15、非零元素索引位置:np.nonzero()
Z = np.nonzero([1,2,0,3,5,2,0])
Z
# (array([0, 1, 3, 4, 5]),)
16、對於給定的 5x5 二維陣列,在其內部隨機放置 p 個值為 1 的數
- np.random.choice(range(5 * 6), p, replace=False)
- 在range(5 * 6)中選擇p個數據。
- np.put(Z, pos, value):將Z中索引為pos的值設定為value
p = 3
Z = np.zeros((5
相關推薦
【Numpy】學習筆記1
文章目錄
一、概述
二、基礎
1、建立陣列
(1)通過 list 建立陣列
(2)特殊陣列
2、陣列運算
(1)基礎運算(一維)
(2
【吳恩達機器學習】學習筆記——1.5無監督學習
分類 哪些 rep epm 朋友 工作 style class 客戶 1 無監督學習:在不知道數據點的含義的情況下,從一個數據集中找出數據點的結構關系。
2 聚類算法:相同屬性的數據點會集中分布,聚集在一起,聚類算法將數據集分成不同的聚類。也就是說,機器不知道這些數據點具體
【Robot定位 學習筆記 1】GPS和IMU(慣導)在無人駕駛中的應用
無人駕駛定位技術
行車定位是無人駕駛最核心的技術之一,全球定位系統(GPS)在無人駕駛定位中也擔負起相當重要的職責。然而無人車是在複雜的動態環境中行駛,尤其在大城市,GPS多路徑反射的問題會很明顯。這樣得到的GPS定位資訊很容易就有幾米的誤差。對於在有限寬度高速行駛的汽車來說,這樣的誤差很有可能
【深入理解JVM】學習筆記——-1、JVM基本結構
轉載自:https://blog.csdn.net/singit/article/details/54920387?utm_source=blogkpcl11
什麼是jvm?JVM的基本結構,
也就是概述。說是概述,內容很多,而且概念量也很大,
不過關於概念方面,你不用擔心,我完全有信心
【Unity3D】學習筆記(第1記) 敵人AI之Seek(靠近)
using UnityEngine;
using System.Collections;
public class enemyController : MonoBehaviour {
publi
【Python】學習筆記十三:函數的參數對應
color 筆記 屏幕 *args borde 基於 但是 all small 位置傳遞
我們在定義函數時候已經對函數進行了參數傳遞調用,但是那只是粗淺的位置傳遞
示例
def sum(a,b,c):
d = a+b+c
return d
p
【Python】學習筆記4-內置函數
打印數字 筆記 轉換 查看 判斷 lis clas 函數 ted 1、內置函數
1 print(all([1,2,3,0])) #判斷可叠代對象裏面是否都為真:非零即真非空即真原則
2 print(any([1,2,3,0])) #判斷可叠代對象裏面是否有一個為真:非
【Python】學習筆記4-time、md5、加密base64模塊
數據庫 sta 自己的 pri 時間 decode 不可 字符 ftime 1、time
# 1、格式化好的時間 2018-1-14 16:42# 2、時間戳 是從unix元年到現在所有的秒數# 3、時間元組# 想時間戳和格式化好的時間互相轉換的話,都要先轉成時間元組,然後
【Python】學習筆記4-os、sys模塊
etc 創建 記錄 body spa platform pri eas usr 1、os操作系統模塊
1 import os
2 print(os.getcwd()) #獲取當前工作目錄
3 # print(os.chdir("..")) #更改當前目錄.當前目錄
【Python】學習筆記5-操作mysql數據庫pymysql
rod bsp phone utf8 charset delet 建立 包含 hone import pymysql#其他數據庫,比如oracle 模塊是pyoracle#1、鏈接數據庫mysq ip 端口號 密碼 賬戶 數據庫#2、建立遊標#3、執行sql#4、獲取結果#
【Python】學習筆記5-利用flask來mock接口
入口 輸出 端口號 delet app file log asc conf # 1、mock接口# import flask #python的輕量級的開發框架# # 接口,後臺服務的開發# # 在瀏覽器運行http://127.0.0.1:8080/get_user即可,或
【python】學習筆記10-ddt數據驅動
get args code imp content coo 文檔 AR ems DDT的使用
DDT包含類的裝飾器ddt和兩個方法裝飾器data(直接輸入測試數據),file_data(可以從json或者yaml中獲取測試數據)
只有yaml和yml結尾的文件以yaml形式
2018/09/07《塗抹MySQL》【引擎】學習筆記(四)
靈活 appears 優點 tables use 做什麽 null div 在線 讀
第七章《引擎》
總結
1:什麽是引擎?
- 就是一種數據存取和處理方式。
- 在 MySQL 中,引擎是以"插件式"存在的,使我們可以很方便的使用各種引擎。
2:怎麽查
【Python】學習筆記
數字型別
整數型別:沒有取值範圍限制
浮點數型別:浮點數精度受限,但精度很高,除科學計算外可視為不受限
複數型別:z = a + bj 實數部分:z.real 複數部分:z.imag
learn numpy & pandas 學習筆記1
import numpy as np
array = np.array([[1,2,3],[2,3,4]]) #列表轉化為矩陣
print(array)
print('number of dim:',array.ndim) # 維度
print('sh
【博弈論】學習筆記
帝王為何殺功臣,大副如何謀位船長,傻B的另一種解釋……
三姬分金
假設有A,B,C三個人,分100枚金幣。怎麼分呢?我們定一個規則,按順序提議,就是A先提議,B,再C,並且如果未超半數以上,不包括半數,同意提議,自己也有投票權。
前提假設:
三人很聰明,追求
【Python】程式設計筆記1
一、概述
Python 提供了非常完善的基礎程式碼庫: 覆蓋了網路、檔案、GUI、資料庫、文字等大量內容,被形象地稱作“內建電池( batteries included) ”。 ==》許多功能不必從零編寫,直接使用現成的即可。
特點:“優雅”、 “明確”、 “簡單”
編譯執行
【httpClient】學習筆記一
HTTP 協議概述
HTTP–Hyper Text Transfer Protocol,超文字傳輸協議,是一種建立在TCP上的無狀態連線,整個基本的工作流程是客戶端傳送一個HTTP請求,說明客戶端想要訪問的資源和請求的動作,服務端收到請求之後,服務端開始處理
【LaTex】學習筆記:入門使用方法
本部落格的LaTex學習以MiKTex+TeXStudio為編輯器。
關於LaTex環境的搭建和相關軟體的安裝,我主要是用了以下軟體:
proTeXt:http://tug.org