Numpy сортировка по увеличению даты и времени - PullRequest
1 голос
/ 03 февраля 2012

У меня есть первый массив i, содержащий элементы datetime (с формой (33416,)), и второй массив m, содержащий значения с плавающей точкой (с формой (33416,20)).Это соответствует 20 измерениям, сделанным в определенный момент.Я хотел бы отсортировать массив i в соответствии с возрастающими значениями даты и времени в i и отсортировать строки массива m соответственно, чтобы иметь увеличивающийся момент измерений и соответствующие ему 20 измерений в этот момент.Может ли кто-нибудь мне помочь?или понимаю мои потребности ???

Ответы [ 2 ]

6 голосов
/ 03 февраля 2012

Вы также можете использовать numpy для этого.Предполагая, что у вас есть:

dates = numpy.array([datetime(2012,02,03,12,00,00), datetime(2012,02,03,15,00,00), datetime(2012,02,03,13,00,00)])
values = numpy.array([[1, 1], [3, 3], [2, 2]])

Сначала вы можете сделать:

unified = numpy.concatenate((dates.reshape(len(dates), 1), values), axis=1)

Это объединит два списка, что, учитывая то, что вы хотите, должно быть более подходящим способом хранения ваших данных.тем не мение.Итак, теперь у вас есть:

unified = array([[2012-02-03 12:00:00, 1, 1],
                 [2012-02-03 15:00:00, 3, 3],
                 [2012-02-03 13:00:00, 2, 2]], dtype=object)

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

unified = numpy.sort(unified, axis=0)

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

unified[:, 0]

>>> array([2012-02-03 12:00:00, 2012-02-03 13:00:00, 2012-02-03 15:00:00], dtype=object)

unified[:, 1:]

>>> array([[1, 1],
           [2, 2],
           [3, 3]], dtype=object)

РЕДАКТИРОВАТЬ после вашего комментария Хорошо, теперь, когда я полностью понимаю, чего вы хотите, вы можете добиться этого, заменив

   unified = numpy.sort(unified, axis=0)    

с:

   unified = numpy.array(sorted(unified, key= lambda x: x[0]))

РЕДАКТИРОВАТЬ

Вы пробовали то, что я только что предложил?В моем терминале:

    unified = numpy.array([[datetime(2012,02,03,12,00,00), 4, 1],[datetime(2012,02,03,15,00,00), 5, 2],[datetime(2012,02,03,13,00,00), 2, 1]], dtype=object)
    >>> unified
        array([[2012-02-03 12:00:00, 4, 1],
               [2012-02-03 15:00:00, 5, 2],
               [2012-02-03 13:00:00, 2, 1]], dtype=object)

    >>> unified = numpy.array(sorted(unified, key=lambda x: x[0]))
    >>> unified
        array([[2012-02-03 12:00:00, 4, 1],
               [2012-02-03 13:00:00, 2, 1],
               [2012-02-03 15:00:00, 5, 2]], dtype=object)
0 голосов
/ 03 февраля 2012

Я не совсем уверен, что вы спрашиваете - ваш вопрос расплывчатый - что означает «сортировать строки из массива m соответственно, чтобы иметь увеличивающийся момент измерений и соответствующие ему 20 измерений в этот момент»?

Но вот ответ на то, что я думаю, вы спрашиваете:

def special_sort(i, m):
    myList = zip(i, m)
    mylist.sort(key=lambda x: x[0])
    return myList

Надеюсь, это поможет

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