Изменяющиеся во времени данные: список кортежей против 2D-массива? - PullRequest
3 голосов
/ 11 апреля 2011

Мой пример кода написан на python, но я спрашиваю об общем принципе.

Если у меня есть набор данных в парах время-значение, я должен сохранить их как двумерный массив или как списоккортежей?например, если у меня есть эти данные:

v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]

Как правило, лучше хранить их так:

data=[v,t]

или в виде списка кортежей:

data=[(1,1),(4,2)(4,3)...]

Есть ли "стандартный" способ сделать это?

Ответы [ 4 ]

4 голосов
/ 11 апреля 2011

Если скорость - ваша самая большая проблема, в Python посмотрите на Numpy.

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

Что касается простой структуры данных, как насчет списка кортежей:

v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]

data=[(1,1),(4,2)(4,3)...]

Тогда вы можете распаковать так:

v,t=data[1]
#v,t are 4,2
2 голосов
/ 11 апреля 2011

Контейнер массива агрегатов, вероятно, является лучшим выбором. Предполагая, что ваши временные точки не распределены регулярно (и, следовательно, вам нужно отслеживать их, а не просто использовать индексацию), это позволяет вам брать фрагменты всего набора данных, например:

import numpy as np
v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]

data = np.array([v,t])

Тогда вы можете нарезать его, чтобы легко получить подмножество данных:

data[:,2:4]  #array([[4, 4],[3, 4]])

ii = [1,2,5] # Fancy indexing
data[:,ii] # array([[4, 4, 4],
           #        [2, 3, 6]])
1 голос
/ 11 апреля 2011

Вы могли бы попробовать словарь?В других языках это может быть известно как хэш-карта, хэш-таблица, ассоциативный массив или какой-либо другой термин, который означает то же самое.Конечно, это зависит от того, как вы намереваетесь получить доступ к вашим данным.

Вместо:

v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]

у вас будет:

v_with_t_as_key = {1:1,  # excuse the name...
                   2:4, 
                   3:4, 
                   4:4, 
                   5:23, 
                   6:4} 

Это довольно стандартныйсоздать в Python, хотя, если порядок важен, вы можете посмотреть упорядоченный словарь в коллекциях .

0 голосов
/ 03 ноября 2012

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

данные = [(1,2,3,4,5,6), (1,4,4,4,23,4)]

Большую часть времени я загружаю множество наблюдений со многими переменными, а затем выполняю сортировку, форматирование или отображение одной или нескольких из этих переменных или даже объединяю два набора данных со столбцами в качестве параметров. Это гораздо реже, когда мне нужно вытащить часть наблюдений. Даже если бы я это сделал, более удобно использовать функцию, которая возвращает подмножество данных с учетом столбца индексов наблюдения.

Сказав это, я все еще использую функции для преобразования неровных массивов в 2d-массивы и для транспонирования 2d-массивов.

...