Python 如何重复我的函数,但使用列表中的下三个值?

Python 如何重复我的函数,但使用列表中的下三个值?,python,Python,如果我键入: microcar(np.array([[45, 10, 10], [110, 10, 8], [60, 10, 5], [170, 10, 4]]), np.array([[47, 10, 15], [112, 9, 8.5], [50, 10, 8], [160, 8.5, 5]])) 它返回: (52.53219888177297, 85.09035245341184, -148.85032037263932, 18.5359684117836, 100, 150.0) 这

如果我键入:

microcar(np.array([[45, 10, 10], [110, 10, 8], [60, 10, 5], [170, 10, 4]]), np.array([[47, 10, 15], [112, 9, 8.5], [50, 10, 8], [160, 8.5, 5]]))
它返回:

(52.53219888177297, 85.09035245341184, -148.85032037263932, 18.5359684117836, 100, 150.0)
这很好,但我希望它对下一组3个值重复此代码,以此类推,例如,预期值为
[110,10,8]
,实际值为
[50,10,8]

我不知道如何合并一个循环,它将下一组3个值视为新值

另外,cos(45)=0.707106(45度),但是它将cos(45)=0.5253(作为弧度)处理。有没有办法将设置转换为度

下面是我的代码


将numpy导入为np
def microcar(预期、实际):
水平预期=预期[0,1]*预期[0,2]*np.cos(预期[0,0])
垂直应为=应为[0,1]*应为[0,2]*np.sin(应为[0,0])
水平实际值=实际值[0,1]*实际值[0,2]*np.cos(实际值[0,0])
垂直实际值=实际值[0,1]*实际值[0,2]*np.sin(实际值[0,0])
预期的距离=预期的[0,1]*预期的[0,2]
距离_实际值=实际值[0,1]*实际值[0,2]
返回水平、垂直、水平、垂直、距离
您可以按如下方式输入并循环它们

将numpy导入为np
def microcar(预期、实际):
l=zip(预期、实际)
res=[]
对于l中的e:
水平线=e[0][1]*e[0][2]*np.cos(e[0][0])
垂直线=e[0][1]*e[0][2]*np.sin(e[0][0])
水平实际值=e[1][1]*e[1][2]*np.cos(e[1][0])
垂直实际=e[1][1]*e[1][2]*np.sin(e[1][0])
预期距离=e[0][1]*e[0][2]
实际距离=e[1][1]*e[1][2]
res.append([
水平面,
垂直方向,
实际水平,
垂直于实际值,
预期的距离,
实际距离
])
返回res
x=微卡(
np.数组([[45,10,10],[110,10,8],[60,10,5],[170,10,4]),
np.数组([[47,10,15],[112,9,8.5],[50,10,8],[160,8.5,5])
)
打印(x)
输出:

[
  [52.53219888177297, 85.09035245341184, -148.85032037263932, 18.5359684117836, 100, 150.0],
  [-79.92166506517184, -3.539414246805677, 34.88163648998712, -68.08466373406274, 80, 76.5],
  [-47.62064902075782, -15.240531055110834, 77.19728227936906, -20.9899882963143, 50, 80.0],
  [37.51979008477766, 13.865978219881212, -41.46424579379759, 9.325573481107702, 40, 42.5]
]
我不知道您希望得到什么样的输出,所以这只是返回一个包含结果的列表列表


至于您关于的问题,它要求输入弧度,因此您可以通过以下方式将度转换为弧度:


不使用
zip
,您可以创建一个等于一个数组长度的数组,并使用值(在本例中为
i
)按以下方式在该数组上循环索引

将numpy导入为np
def microcar(预期、实际):
res=[]
对于范围内的i(len(预期)):
水平预期=预期的[i,1]*预期的[i,2]*np.cos(预期的[i,0])
垂直_预期=预期的[i,1]*预期的[i,2]*np.sin(预期的[i,0])
水平实际值=实际值[i,1]*实际值[i,2]*np.cos(实际值[i,0])
垂直实际=实际[i,1]*实际[i,2]*np.sin(实际[i,0])
预期的距离=预期的[i,1]*预期的[i,2]
距离实际值=实际值[i,1]*实际值[i,2]
res.append([
水平面,
垂直方向,
实际水平,
垂直于实际值,
预期的距离,
实际距离
])
返回res
x=微卡(
np.数组([[45,10,10],[110,10,8],[60,10,5],[170,10,4]),
np.数组([[47,10,15],[112,9,8.5],[50,10,8],[160,8.5,5])
)
打印(x)
输出:

[
  [52.53219888177297, 85.09035245341184, -148.85032037263932, 18.5359684117836, 100, 150.0],
  [-79.92166506517184, -3.539414246805677, 34.88163648998712, -68.08466373406274, 80, 76.5],
  [-47.62064902075782, -15.240531055110834, 77.19728227936906, -20.9899882963143, 50, 80.0],
  [37.51979008477766, 13.865978219881212, -41.46424579379759, 9.325573481107702, 40, 42.5]
]

注意,这假设两个输入的长度相等。如果不是,您可能会遇到
索引器
异常。这个假设同样适用于
zip
,但是在较长的数组中,您将“丢失”多余的条目。

这真是太好了!但是,有没有其他方法可以不使用zip编写它?因为我还没有学会,所以不允许我在作业中使用它。至于将度数转换为弧度,当我键入上述代码时,它会不断出现错误deg2rad not defined??我用不带
zip
的解决方案更新了答案。还更正了
deg2rad
前面缺少的
np.
。旁注:另一次,请注意,如果这是一项家庭作业,我可能会更多地暗示答案,以帮助你自己弄清楚,而不是直接写出来。
[
  [52.53219888177297, 85.09035245341184, -148.85032037263932, 18.5359684117836, 100, 150.0],
  [-79.92166506517184, -3.539414246805677, 34.88163648998712, -68.08466373406274, 80, 76.5],
  [-47.62064902075782, -15.240531055110834, 77.19728227936906, -20.9899882963143, 50, 80.0],
  [37.51979008477766, 13.865978219881212, -41.46424579379759, 9.325573481107702, 40, 42.5]
]