获取csv信息,排序并生成numpy数组(python

2024-05-19 07:23:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图定义一个函数,它接受两个输入,一个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数组?你知道吗

正如你所看到的,我正在努力解决这个问题,所以任何帮助/指导,或者甚至建议一个更好的方法都将非常感谢。我已经试着解释了我所做的一切,以避免混淆,抱歉,如果它有点长!你知道吗

谢谢你!你知道吗


Tags: csv数据函数numpy列表asnp数组
1条回答
网友
1楼 · 发布于 2024-05-19 07:23:40

如果我理解正确的话,您的文件就像一个简单的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列)

y += speed * time 

如果动作为“W”,则从“x”变量中减去速度*时间

x -= speed * time

以此类推“E”和“S”

我所说的“for each”是指,您应该一行一行地遍历数据网格,并为每一行执行一个操作。例如:

for row in file1_structured_array:
    action  = row[0]
    speed = float(row[1])
    time = float(row[2])
    if action == "N":
        y += speed * time
    elif action == "S":
        ...
    elif action == "E":
        ...
    elif action == "W":
        ...

4)执行结束时,变量x中有水平位移,变量y中有垂直位移。另外,你可以借助勾股定理来求距离。你知道吗

5)这个结果可以很容易地放入您需要的python或numpy数组中。你知道吗

相关问题 更多 >

    热门问题