嘗試制作一個簡單的運動學陣列(為了好玩!)其中
- 系統會提示您輸入一個 int 輸入 tmax,它確定 t = [0, tmax]
所以這意味著如果您輸入 tmax = 5,則時間間隔將為 t = [0, 5] 秒
- 系統會提示您輸入浮點輸入 jerkc(位置的三次導數),該輸入確定用于計算加速度 (jerkc * t)、速度 (jerkc * 1/2 * t^2) 和位置的常數。
我正在嘗試使用 NumPy(我對此和 python 很陌生)來創建一個二維陣列,其中:
第 1 行:時間(因此對于 tmax = 5,該行將是:[0, 1, 2, 3, 4, 5])
第 2 行:加速度(t)(所以對于 tmax = 5,Jerkc = 2,這行將是 [0, 2, 4, 6, 8, 10]
第 3 行:速度(t)(依此類推……)
第 4 行:位置(t)(依此類推......)
我仍然對串列非常不熟悉——尤其是 NumPy 陣列。我已經習慣了 Java 陣列,如果你想知道我為什么要這樣對待這個陣列。這是我到目前為止的示例:
import numpy as np
tmax = int(input('Please enter a timeframe [0, t] [int]: '))
print('Thank you! Your timeframe will be [0, ', tmax, ']!')
jerkc = float(input('Please enter a jerk constant [float]: '))
print('Thank you! Your jerk constant will be ', jerkc, '!')
physics = np.array([[], [], [], []])
t = int(0)
i = int(0)
m = int(0)
e = int(0)
while (t <= tmax):
physics[0, t] = t
t = t 1
while (i <= tmax):
physics[1, t] = (jerkc * t)
t = t 1
while (m <= tmax):
physics[2, t] = ((jerkc) * (1/2) * (t ^ 2))
t = t 1
while (e <= tmax):
physics[3, t] = ((jerkc) * (1/2) * (1/3) * (t ^ 3))
print(physics)
如果有人知道我做錯了什么,或者可以向我解釋一種我可以更好地使用陣列的方法,請告訴我,并請仔細和可理解地解釋自己!謝謝!
uj5u.com熱心網友回復:
NumPy 陣列的特別之處在于您可以使用它進行計算。這意味著如果將 2 個陣列相乘,結果陣列將包含這些陣列的值相乘。
如本例所示:
>>> array1=array([1,2,3,4])
>>> array2=array([5,6,7,8])
>>>
>>> array1 * array2
array([ 5, 12, 21, 32])
這也適用于加法,減法,除法......
NumPy 的另一個優點是arange函式。它的作業方式與rangepython 中的函式類似,但回傳的是一個陣列。它有三個引數:start、end 和 step。回傳的陣列將從 start 引數開始。然后將以下專案與步長值相加,依此類推。直到下一項將大于最終值。
這是一個例子:
>>> arange(1,10)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> arange(1,10,2)
array([1, 3, 5, 7, 9])
>>> arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
注意:未提供 step 引數時,默認為 1。如果只提供一個引數,則從 0 開始,以該引數結束。
還有一個zeros功能。它回傳給定大小的陣列,用零填充。最好以這種方式初始化陣列。
>>> zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> zeros((2,2))
array([[0., 0.],
[0., 0.]])
最后,就像 python 中幾乎所有的可索引物件一樣,NumPy 陣列支持切片。它的作業方式array[start:end]。它回傳陣列中從索引開始到結束之前的索引的部分。如果省略 start,則結果將從陣列的開頭到索引結尾。end 引數也是如此。如果兩者都省略 ( :),則結果只是整個陣列。此外,可以提供第三步值,array[start:end:step]。這確實與 with 以相同的方式作業,arange結果值的索引將從開始計數。
一個例子:
>>> array1=array([1,2,3,4,5,6,7,8,9,10])
>>>
>>> array1[2:4]
array([3, 4])
>>> array1[:4]
array([1, 2, 3, 4])
>>> array1[2:]
array([ 3, 4, 5, 6, 7, 8, 9, 10])
>>> array1[:]
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> array1[5:9:3] #with step value
array([6, 9])
由于 NumPy 更喜歡為所有維度設定索引,因此我們將使用它physics[1,:]來告訴 NumPy 我們想要更改陣列中的所有值。
如果我們使用前面提到的東西重寫你的代碼,它看起來像:
import numpy as np
tmax = int(input('Please enter a timeframe [0, t] [int]: '))
print('Thank you! Your timeframe will be [0, ', tmax, ']!')
jerkc = float(input('Please enter a jerk constant [float]: '))
print('Thank you! Your jerk constant will be ', jerkc, '!')
physics = np.zeros((4,tmax 1))
physics[0, :] = np.arange(tmax 1)# 1, as the end is not included in the array.
physics[1, :] = physics[0, :] * jerkc
physics[2, :] = ((jerkc) * (1/2) * (physics[0, :] ** 2))
physics[3, :] = ((jerkc) * (1/2) * (1/3) * (physics[0, :] ** 3))
注意: **是python中的冪運算子,^是排他的或因此不起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479470.html
標籤:Python 数组 麻木的 numpy-ndarray
下一篇:計算熊貓資料框列中唯一專案的數量
