получение csv-информации, сортировка и создание массива numpy (python - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь определить функцию, которая принимает два ввода, инструкции и действия для автомобиля, которые представляют собой списки строк, которые содержат имена открываемых CSV-файлов, содержащих данные (я не могу использовать импорт библиотеки csv).CSV-файлы содержат данные в столбцах в формате;действие, время, скорость.например, N, 10, 10 означает север в течение 10 секунд со скоростью 10 метров в секунду.смещение будет тогда равным 100 на север и т. д.

Скажем, первый файл instr1.csv содержит (без заголовка):

N, 10, 10 
E, 10, 8 
S, 10, 5
W, 10, 4

В конечном итоге я хочу вернуть вертикальные и горизонтальные смещения для автомобиляа затем общее расстояние в массивах.Я застреваю, пытаясь выяснить, как, когда действие находится на севере, я беру 2-й столбец и 3-й столбец, умножаю их друг на друга, добавляю его в список и затем создаю пустой список для возврата.* Сначала я читаю данные, зацикливаюсь на каждой строке для получения данных, затем создаю структурированный массив (arrayInstructionsFile1) с dtypes.

То, что я получил до сих пор:

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, а затем умножить числа с плавающей запятой друг на друга, чтобы я мог вернутьВам нужны массивы?

Как вы можете видеть, я очень борюсь с этим, поэтому любая помощь / руководство или, возможно, даже предложение лучшего подхода будет очень цениться.Я пытался объяснить все, что я пытаюсь сделать, чтобы избежать путаницы, извините, если это немного долго!

Спасибо!

1 Ответ

0 голосов
/ 23 октября 2018

Если я правильно вас понял, ваш файл - это что-то вроде простой программы LOGO (https://en.wikipedia.org/wiki/Logo_(programming_language))

. Вы можете «воспроизвести» «программу» следующим образом:

1) Определите переменные x и y, в начале они должны быть равны нулю, что означает «нет смещений»

2) Определите, как ваши направления (N, E, S, W) будут применяться к системе координат XYНапример, направление на север положительное Y, юг отрицательное Y, восток положительное X, а запад отрицательное X

3) Для каждого действия проверьте, что должно быть сделано в соответствии с вашим решениемв точке 2:

Если действие "N", вы должны добавить скорость * время к переменной y .(где скорость и время взяты из ваших 2-го и 3-го столбцов)

y += speed * time 

, если действие "W", вычитание скорости * время из переменной "x"

x -= speed * time

и т. д.для «E» и «S»

By «для каждого» Я имею в виду, что вы должны проходить по вашей сетке данных строка за строкой, и для каждой строки предпринимать действия.Например:

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 или массив значений ваших потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...