我试图定义一个函数,它接受两个输入,一个car的指令和操作,这是包含要打开的CSV文件名的字符串列表,其中包含数据(我不能使用CSV库导入)。csv文件包含的数据列格式为:动作、时间、速度。e、 gn,10,10表示以每秒10米的速度向北10秒。然后位移会向北100等
假设第一个instr1.csv文件包含(无标题):
N, 10, 10
E, 10, 8
S, 10, 5
W, 10, 4
最终我要返回汽车的垂直和水平位移,然后返回numpy数组中的总距离。我一直想弄清楚,当动作在北方时,我是如何取第2列和第3列,将它们相乘,附加到一个列表中,然后创建一个numpy列表返回的。你知道吗
首先我读取数据,在每一行上循环生成数据,然后创建一个具有数据类型的结构化数组(arrayInstructionsFile1)。你知道吗
到目前为止我得到的是:
import numpy as np
#import matplotlib.pyplot as plt #(plot numpy arrays later)
def car(instructions,actions):
instrucFile = instructions
newArrayFile1 = []
newArrayFile2 = []
lstNorth = []
for file in instrucFile[0:1]: #reads first csv file
with open(file) as filedata: #get data
arrayInstructionsFile1 = np.genfromtxt(file,delimiter=',',dtype=[('action','U1'),('time',float),('speed',float)],encoding=None,usecols=None)
for i in arrayInstructionsFile1: #loops each row to a list
newArrayFile1.append(i)
npArrInstrucDataFile1 = np.array(newArrayFile1) #prints structured array
print('File1 structured array = ',npArrInstrucDataFile1)
现在使用如下函数:
car(['instr1.csv','instr2.csv'],['act1.csv','act2.csv'])
给出结构化数组:
File1 structured array = [('N', 10., 10.) ('E', 10., 8.) ('S', 10., 5.) ('W', 10., 4.)]
但是我很困惑,如何让python根据动作是N、E、S还是W将值放入一个新的数组中,然后将浮点数相乘,以便返回所需的numpy数组?你知道吗
正如你所看到的,我正在努力解决这个问题,所以任何帮助/指导,或者甚至建议一个更好的方法都将非常感谢。我已经试着解释了我所做的一切,以避免混淆,抱歉,如果它有点长!你知道吗
谢谢你!你知道吗
如果我理解正确的话,您的文件就像一个简单的LOGO程序(https://en.wikipedia.org/wiki/Logo_(programming_language))
您可以按以下方式“播放”程序:
1)定义x和y变量,开始时应为零,即“无位移”
2)决定你的方向(N,E,S,W)将如何应用于X-Y坐标系,例如,北方向是正Y,南方向是负Y,东方向是正X,西方向是负X
3)根据你在第2点中的决定,检查每个动作,以及应该做什么:
如果action为“N”,则应将speed*time添加到y变量中。 (速度和时间取自第2列和第3列)
如果动作为“W”,则从“x”变量中减去速度*时间
以此类推“E”和“S”
我所说的“for each”是指,您应该一行一行地遍历数据网格,并为每一行执行一个操作。例如:
4)执行结束时,变量x中有水平位移,变量y中有垂直位移。另外,你可以借助勾股定理来求距离。你知道吗
5)这个结果可以很容易地放入您需要的python或numpy数组中。你知道吗
相关问题 更多 >
编程相关推荐