Каков самый быстрый способ выборки массивов numpy?

У меня есть массив 3D (время, X, Y), содержащий 6 часовых временных рядов в течение нескольких лет. (скажем, 5). Я хотел бы создать выборочный временной ряд, содержащий 1 экземпляр каждого календарного дня, случайным образом взятый из доступных записей (5 возможностей в день), следующим образом.

  • Январь 01: 2006
  • Январь 02: 2011
  • 03 января 2009

это означает, что мне нужно принять 4 значения с 01/01/2006, 4 значения от 02/01/2011 и т. д. У меня есть рабочая версия, которая работает следующим образом:

  • Измените входной массив, чтобы добавить измерение «год» (время, год, X, Y)
  • Создайте массив значений 365 из произвольно генерируемых целых чисел от 0 до 4
  • Используйте np.repeat и массив целых чисел, чтобы извлечь только соответствующие значения:

Пример:

sampledValues = Variable[np.arange(numberOfDays * ValuesPerDays), sampledYears.repeat(ValuesPerDays),:,:] 

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

Правильно ли я это делаю?

благодаря

EDIT Я забыл упомянуть, что я отфильтровал входной набор данных, чтобы удалить 29-й feb для високосных лет.

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

2 Solutions collect form web for “Каков самый быстрый способ выборки массивов numpy?”

2008 год составлял 366 дней, поэтому не переделывать.

Посмотрите на scikits.timeseries :

 import scikits.timeseries as ts start_date = ts.Date('H', '2006-01-01 00:00') end_date = ts.Date('H', '2010-12-31 18:00') arr3d = ... # your 3D array [time, X, Y] dates = ts.date_array(start_date=start_date, end_date=end_date, freq='H')[::6] t = ts.time_series(arr3d, dates=dates) # just make sure arr3d.shape[0] == len(dates) ! 

Теперь вы можете получить доступ к данным t с помощью объектов день / месяц / год:

 t[np.logical_and(t.day == 1, t.month == 1)] 

так например:

 for day_of_year in xrange(1, 366): year = np.random.randint(2006, 2011) t[np.logical_and(t.day_of_year == day_of_year, t.year == year)] # returns a [4, X, Y] array with data from that day 

Играйте с атрибутами t чтобы он работал с високосными годами.

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

Например, вы можете сгенерировать случайное смещение (от 0 до 365) и выбрать срез с индексом, скажем, n*365 + offset .

Во всяком случае, я не думаю, что ваш вопрос завершен, потому что я не совсем понял, что вам нужно делать, или почему.

  • Массив массива Increment с повторяющимися индексами
  • Сплайны с Python (с использованием узлов управления и конечных точек)
  • numpy.polyfit дает пустой массив остатков
  • Недостаток указателя в массивах numpy
  • N мерных массивов - Python / Numpy
  • Как скопировать число с плавающей запятой чуть ниже предела?
  • Для цикла кажется более быстрым, чем интерполяция NumPy / SciPy 3D
  • Есть ли функция в numpy для замены нижних и верхних диагональных значений массива numpy?
  •  
    Interesting Posts for Van-Lav

    Как вы можете напечатать имя переменной в python?

    Удаление элементов из списка при повторном

    AttributeError: объект 'module' не имеет атрибута 'urlopen'

    Как выполнить декодирование / кодирование HTML с помощью Python / Django?

    Сортировка вывода JSON в Python

    Python: как я могу разобрать {apple: "1", orange: "2"} в словаре?

    Python: показать сообщение «Ожидание игрока …», в то время как сокет прослушивает соединение

    Объект «staticmethod» не является вызываемым переключателем / регистром

    Изменен ли Python на более объектно-ориентированный?

    Python возвращает уникальные слова из списка (без учета регистра)

    Got gdbm error: (13, 'Permission denied') – Несмотря на разрешение posix, похоже, ОК

    Как подготовить модель на C ++ с помощью тензорного потока?

    Может ли кто-нибудь объяснить этот действительно базовый код Python для меня?

    обнаруживать высокие значения из массива numpy

    Переименование нескольких файлов в каталоге с помощью Python

    Python - лучший язык программирования в мире.