NumPy:如何制作包含 x 输入和 f(x) 输出的二维数据数组(使用运动学示例)
NumPy: How to make a 2-dim data array containing both x inputs and f(x) outputs (using example of kinematics)
尝试制作一个简单的运动学阵列(为了好玩!)其中
- 系统提示您输入一个确定 t = [0, tmax]
的 int 输入 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 行:position(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)
如果有人知道我做错了什么,或者可以向我解释我可以更好地使用数组的方法,请告诉我,并请仔细和理解地解释自己!谢谢!
NumPy 数组的特别之处在于您可以用它进行计算。这意味着如果您将 2 个数组相乘,结果数组将包含这些数组的值与彼此相乘。
如本例所示:
>>> array1=array([1,2,3,4])
>>> array2=array([5,6,7,8])
>>>
>>> array1 * array2
array([ 5, 12, 21, 32])
这也适用于加法、减法、除法...
NumPy 的另一大优点是 arange
函数。它的工作方式类似于 python 中的 range
函数,但 returns 是一个数组。它具有三个参数:开始、结束和步骤。返回的数组将以 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
函数。它 returns 给定大小的数组,用零填充。最好以这种方式初始化数组。
>>> 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]
的方式工作。它 returns 从索引开始到结束之前的索引的数组部分。如果省略 start,则结果将从数组的开头到索引结尾。 end 参数也是如此。如果两者都省略 (:
),则结果只是整个数组。此外,可以提供第三步值 array[start:end:step]
。这与 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中的幂运算符,^
是异或,所以不会起作用。
尝试制作一个简单的运动学阵列(为了好玩!)其中
- 系统提示您输入一个确定 t = [0, tmax] 的 int 输入 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 行:position(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)
如果有人知道我做错了什么,或者可以向我解释我可以更好地使用数组的方法,请告诉我,并请仔细和理解地解释自己!谢谢!
NumPy 数组的特别之处在于您可以用它进行计算。这意味着如果您将 2 个数组相乘,结果数组将包含这些数组的值与彼此相乘。
如本例所示:
>>> array1=array([1,2,3,4])
>>> array2=array([5,6,7,8])
>>>
>>> array1 * array2
array([ 5, 12, 21, 32])
这也适用于加法、减法、除法...
NumPy 的另一大优点是 arange
函数。它的工作方式类似于 python 中的 range
函数,但 returns 是一个数组。它具有三个参数:开始、结束和步骤。返回的数组将以 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
函数。它 returns 给定大小的数组,用零填充。最好以这种方式初始化数组。
>>> 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]
的方式工作。它 returns 从索引开始到结束之前的索引的数组部分。如果省略 start,则结果将从数组的开头到索引结尾。 end 参数也是如此。如果两者都省略 (:
),则结果只是整个数组。此外,可以提供第三步值 array[start:end:step]
。这与 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中的幂运算符,^
是异或,所以不会起作用。