Создание нескольких массивов из одного текстового файла с помощью numpy?

#python #arrays #numpy #statistics #data-analysis

#python #массивы #numpy #Статистика #анализ данных

Вопрос:

Мне трудно понять, как создать несколько массивов из данных, содержащихся в одном текстовом файле, используя numpy.

Вот пример такого текстового файла данных, например. Вот коллекция экспериментов по мониторингу температуры в зависимости от времени в 3 разных комнатах (обратите внимание, что не во всех трех комнатах одинаковое количество точек данных. Т.Е. комната 1 имеет 50 измерений, а комната 3 — 60):

  ****************************************
 # Room 1 Temperature Data
 ****************************************
 Time(min)    Temperature (F)
 0.000000     79.437828
 1.000000     79.486399  
 2.000000     78.937826  
 3.000000     79.915109  
 4.000000     79.783212  
 5.000000     80.439590  
 6.000000     80.584616  
 7.000000     80.888416  
 8.000000     81.347893  
 9.000000     81.130460  
 10.000000    80.916185  
 11.000000    81.635287  
 12.000000    82.255327  
 13.000000    82.928414  
 14.000000    82.304390  
 15.000000    82.023584  
 16.000000    81.987552  
 17.000000    82.919697  
 18.000000    83.046323  
 19.000000    83.701333  
 20.000000    82.853548  
 21.000000    82.959824  
 22.000000    83.055705  
 23.000000    83.866592  
 24.000000    83.605570  
 25.000000    84.407895  
 26.000000    83.689157  
 27.000000    82.887504  
 28.000000    83.833871  
 29.000000    84.717961  
 30.000000    84.899855  
 31.000000    84.003771  
 32.000000    83.104074  
 33.000000    82.753278  
 34.000000    82.504778  
 35.000000    83.033076  
 36.000000    83.751608  
 37.000000    83.843025  
 38.000000    83.490735  
 49.000000    83.302364  
 50.000000    82.521700   
****************************************
# Room 2 Temperature Data
****************************************
 Time(min)    Temperature (F)
 0.000000     75.782390  
 1.000000     75.320445  
 2.000000     74.922264  
 3.000000     75.172929  
 4.000000     75.732617  
 5.000000     75.574824  
 6.000000     75.888783  
 7.000000     75.736023  
 8.000000     75.439475  
 9.000000     75.688731  
 10.000000    76.311728  
 11.000000    76.299164  
 12.000000    75.405466  
 13.000000    75.371734  
 14.000000    75.381002  
 15.000000    75.254838  
 16.000000    75.006870  
 17.000000    75.562626  
 18.000000    74.762781  
 19.000000    73.795740  
 20.000000    74.360492  
 21.000000    75.066809  
 22.000000    74.514213  
 23.000000    74.768058  
 24.000000    73.897399  
 25.000000    73.375240  
 26.000000    73.294786  
 27.000000    73.620151  
 28.000000    73.055555  
 29.000000    72.995449  
 30.000000    73.952031  
 31.000000    73.978138  
 32.000000    73.918401  
 33.000000    74.250683  
 34.000000    74.293124  
 35.000000    73.807662  
 36.000000    74.455998  
 37.000000    73.713568  
 38.000000    73.057456  
 39.000000    72.407279  
 40.000000    72.171160   

****************************************
# Room 3 Temperature Data
****************************************
 Time(min)    Temperature (F) 
 0.000000    70.723365  
 1.000000    71.680261  
 2.000000    70.688760  
 3.000000    70.808473  
 4.000000    71.312032  
 5.000000    71.092122  
 6.000000    70.709332  
 7.000000    71.304622  
 8.000000    71.750163  
 9.000000    72.351945  
 10.000000    73.295310  
 11.000000    74.050310  
 12.000000    74.263993  
 13.000000    73.812078  
 14.000000    73.849626  
 15.000000    73.987411  
 16.000000    74.891099  
 17.000000    74.779985  
 18.000000    75.671037  
 19.000000    75.816610  
 20.000000    76.651356  
 21.000000    76.419316  
 22.000000    75.513236  
 23.000000    76.234259  
 24.000000    76.728721  
 25.000000    76.832285  
 26.000000    77.067110  
 27.000000    77.743246  
 28.000000    78.542883  
 29.000000    78.436506  
 30.000000    77.641707  
 31.000000    78.297866  
 32.000000    79.028430  
 33.000000    78.522984  
 34.000000    78.421532  
 35.000000    78.708468  
 36.000000    78.463713  
 37.000000    78.078904  
 38.000000    78.865942  
 39.000000    79.072956  
 40.000000    79.827616  
 41.000000    78.946210  
 42.000000    79.194117  
 43.000000    79.871765  
 44.000000    80.085492  
 45.000000    80.440528  
 46.000000    80.836500  
 47.000000    81.725440  
 48.000000    82.491217  
 49.000000    81.830982  
 50.000000    82.190160  
 51.000000    81.254962  
 52.000000    81.835875  
 53.000000    82.459993  
 54.000000    81.881924  
 55.000000    81.921508  
 56.000000    82.496043  
 57.000000    82.507862  
 58.000000    83.490328  
 59.000000    83.438183  
 60.000000    83.351193
 

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

Спасибо за вашу помощь!

Комментарии:

1. Прочитайте файл с помощью обычного чтения текста на Python и соберите соответствующие номера в списке (списках) списков. Создайте из этого массив. Вы можете отложить преобразование строки с плавающей точкой до np.array(alist, float) шага.

Ответ №1:

В приведенном ниже коде data приведена строка с измерениями, отформатированными как в вопросе. Он создает словарь массивов numpy, где ключами являются номера комнат.

 import re
import numpy as np

match = re.findall(r'[0-9][0-9. n]*', data)
arrays = {
    int(match[i]): np.fromstring(m[i   1], sep=" ").reshape(-1, 2)
    for i in range(0, len(match), 2)
}