Преобразовать список с номерами с вкладками в числовой массив или матрицу - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть список, каждый элемент которого представляет собой строку информации о сообщении:

rawdata = 
['1 1474585  1    19                                3', 
 '2 1474585  1    19                                2', 
 '3 1474585  1    27                                2', 
 '4 1474585  1    27                                2']

Информация описывает следующее: [CAN MessageID DLC Data Time]
Для доступа и анализа информацииЯ пытаюсь разделить список и превратить его в числовой массив.Я попытался использовать split:

longstring = str.split(str(rawdata))

, но это просто делит список на одну длинную строку:

longstring=
["['1", '1474585', '1', '19', "3',", "'
    2",  '1474585', '1', '19', "2',", "'
    3", '1474585', '1', '27', "2',
  "'4", '1474585', '1', '27', "2',",]"]

То, что я пытаюсь получить, - это возможность вызова всех идентификаторов сообщения с помощьюнаписание:

mydreamarray[:][0] = [1,2,3,4]
mydreamarray[:][1] = [1474585,1474585,1474585,1474585]
mydreamarray[:][2] = [1,1,1,1]
mydreamarray[:][3] = [19,19,27,27]
mydreamarray[:][-1] = [3,2,2,2]

Пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Вы можете создать numpy.array

import numpy as np
newarray = np.array([[int(i) for i in j.split()] for j in rawdata])

Тогда, например,

>>> newarray
array([[      1, 1474585,       1,      19,       3],
       [      2, 1474585,       1,      19,       2],
       [      3, 1474585,       1,      27,       2],
       [      4, 1474585,       1,      27,       2]])
>>> newarray[:,0]
array([1, 2, 3, 4])
>>> newarray[:,1]
array([1474585, 1474585, 1474585, 1474585])
0 голосов
/ 20 ноября 2018

Вы действительно должны решить такие вещи для себя.Вот как ты учишься.Под лежачий камень вода на течет.Просить других людей выполнять вашу работу за вас ничему не научит.

Это может помочь

Как настроить пустое значение mydreamarray?Массивы Python начинаются с нуля, поэтому у вас не может быть элемента -1.Тем не менее, вы можете использовать диктовку.Дикт может содержать любое целое число или строку в качестве ключа.Итак,

mydreamdict={}
mydreamdict[-1] = []  # etc

Или, может быть, лучше отказаться от использования -1 и использовать вместо него 4?

Чтобы добавить в список, вы используете его метод .append()

rawdata - это список необработанных строк, и вы хотите что-то сделать с каждой из них, добавив поля данных в пустые списки в mydreamdict.Итак,

for row in rawdata:
    fields = split( row )
    mydreamdict[0].append( ... something out of fields  )
    #... more code needed

fields - это список строк.Вы хотите преобразовать строку в целое число перед сохранением.Встроенная функция int() делает это.

0 голосов
/ 20 ноября 2018

Использование zip с list-comprehension.zip(*[..]) будет транспонировать данные.

l = list(zip(*[map(int,i.split()) for i in rawdata]))
print (l)

Вывод:

[(1, 2, 3, 4),
 (1474585, 1474585, 1474585, 1474585),
 (1, 1, 1, 1),
 (19, 19, 27, 27),
 (3, 2, 2, 2)]

l[1]
#(1474585, 1474585, 1474585, 1474585)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...