--- tags: 教學, 教學4, AUV, python --- :::info https://hackmd.io/@NCTU-auv/ByWBWPPn8 ::: [TOC] # Python套件 ## pip :::info **簡介** pip 是 python套件管理器 可以透過pip安裝、更新、移除python套件 ::: ### 安裝方法 ```shell= sudo apt install python-pip #python2 sudo apt install python3-pip #python3 pip install numpy pip3 install numpy ``` ## import :::info 若要使用某套件,要先import才可以使用。 ::: ### import套件的方法 * ```import <套件名>``` * ```import <套件名> as <簡稱>``` * ```from <套件名> import <特定功能>``` ### example ```python= import numpy #引入名為numpy的模組 print(numpy.pi) import numpy as np #引入名為numpy的模組,並命名為np print(np.pi) from numpy import pi print(pi) ``` ## Numpy :::info 一個好用的數學運算模組 提供與matlab 相似的功能 常常與 ==matplotlib== 一同使用 ::: ### for example ```python= import numpy as np coeff = [3.2,2,1] #方程式係數為 3.2x^2+2x+1 np.roots(coeff) ``` **不過其實numpy這個功能博大精深,今天僅大概介紹最基礎的資料儲存部份** ### numpy array 與 list 的不同: numpy array 與 list 是很相像的 然而list 中的子元素可以是各式各樣的,這種方式當然有他的方便之處,但是這樣靈活的儲存方式卻是相當的消耗記憶體與cpu 而numpy array 則規定了只能有一種資料儲存方式,這種結構與C++類似,效率也比較高 ### 宣告方式 ==注意 一定是用中括弧"[ ]包起來"== #### 直接列出來宣告 ```python= import numpy as np wrong = np.array(1,2,3) a=np.array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]]) #整數宣告 b=np.array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]],dtype=float) #浮點數宣告 #可用 np.dtype 查詢 ``` #### 特殊宣告功能 1. arrange ```python= array1 = np.arange(10) array2 = np.arange(1,10,0.1) #vs range list1 = list(range(10)) list2 = list(range(1,10,0.1)) #只能是整數 ``` 2. linspace ```python= array1 = np.linspace(0,8,100) #在 0~ 8 之間插入100個數 ``` 3. reshape ```python= array1 = np.linspace(0,8,100) array1 = array1.reshape(20,5) #將 array 變成 20*5的矩陣 array1 = np.linspace(0,7,100).reshape(4,25) #可以寫成一串 ``` 4. zeros & ones ```python= array1 = np.zeros((3,4)) array2 = np.ones((2,3,4)) #vs range是整數 ``` ### 基本計算 #### 加減乘除 此處的加減乘除並非矩陣的乘除,而是對相對應的數字做計算 ```python= a = np.arange(10,60,10) #a=10 20 30 40 50 b = np.arange(1,6,1) #b=1 2 3 4 5 print(a-b) print(a+b) print(a*b) print(a/b) print(b**2) a+=a #就像C++一樣 print(a) c = np.linspace(0,90,100) print(np.sin(np.deg2rad(c))) d = np.linspace(0,np.pi/2,100) print(np.sin(d)) print(c<45) ``` #### 矩陣相乘 A: | 1 | 1 | | -------- | -------- | | 0 | 1 | B: | 2 | 0 | | -------- | -------- | | 3 | 4 | ```python= A = np.array( [[1,1],[0,1]] ) B = np.array( [[2,0],[3,4]] ) print(A@B) print(A.dot(B)) ``` ### index array1 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 | | -------- | -------- |-------- |-------- |-------- |-------- |-------- |-------- |-------- |-------- |-------- | array2 |10. | 10.90909091| 11.81818182| 12.72727273| 13.63636364| | -------- | -------- |-------- |-------- |-------- | | 14.5454545| 15.45454545| 16.3636363| 17.27272727| 18.18181818| | 19.0909090| 20. | 20.90909091| 21.81818182| 22.72727273| | 23.63636364| 24.54545455| 25.45454545| 26.3636363| 27.27272727| | 28.18181818| 29.09090909| 30. | 30.90909091| 31.81818182| | 32.72727273| 33.63636364| 34.54545455| 35.45454545| 36.36363636| | 37.27272727| 38.18181818| 39.09090909| 40. | 40.90909091| | 41.81818182| 42.72727273| 43.63636364| 44.54545455| 45.45454545| | 46.36363636| 47.27272727| 48.18181818| 49.09090909| 50| | 50.90909091| 51.81818182| 52.72727273| 53.63636364| 54.54545455| | 55.45454545| 6.36363636| 57.27272727| 58.18181818| 59.09090909| | 60.| 60.90909091| 61.81818182| 62.72727273| 63.63636364| | 69.09090909| 70. | 70.90909091| 71.81818182| 72.72727273| | 73.63636364| 74.54545455| 75.45454545| 76.36363636| 77.27272727| | 78.18181818| 79.09090909| 80. | 80.90909091| 81.81818182| | 82.72727273| 3.63636364|84.54545455| 85.45454545| 86.36363636| |87.27272727|88.18181818|89.09090909|90. | 90.90909091| |91.8181818|92.72727273|93.63636364|94.54545455| 95.45454545| | 96.36363636|97.27272727|98.18181818| 99.09090909| 100| ```python= array1 = np.linspace(10,100,10) array1[0] array1[0:3] array1[:] array1[::-1] array2 = np.linspace(10,100,100) array2 = array2.reshape(20,5) array2[:,:] array2[:,1:3] array2[2:4,1] array2[0,-2] #倒數第二個 ``` # homework 繳交方式說明 ``` scp -P 'Port' "檔名" 帳號@ip:要存的路徑 ``` ## hw1 讀取以下json檔,計算出10秒後,物體的位移(m) https://drive.google.com/file/d/11AgYNS6zUCh1n1yoiF6PSTtjz_ylaNA3/view?usp=sharing 備註: 1. 必須使用'numpy' 2. 假設輸入檔案名稱皆為homework.json 3. 若Json檔沒有此項資料,vel,force default=0 ,Mass default=1 hint : https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.inv.html Json資料的Key: ``` Mass : 質量(kg) vel_x: X方向初速(m/s) vel_y: Y方向初速(m/s) vel_z: Z方向初速(m/s) Force_x : X方向的分力(N) Force_y : Y方向的分力(N) Force_z : Z方向的分力(N) ``` #### Example: INPUT: ``` homework.json ``` OUTOUT: ``` position_x: 10 position_y: 50 position_z: 5 ```