Индексирование массива с использованием имен столбцов - PullRequest
0 голосов
/ 28 мая 2018

Я загружаю довольно большие входные файлы в массив Numpy (30 столбцов, более 10 тыс. Строк).Данные содержат только числа с плавающей запятой.Чтобы упростить обработку данных, я хотел бы назвать столбцы и обращаться к ним, используя удобочитаемые имена.AFAIK это возможно только использование структурированных / записи массивов.Однако, если я прав, когда я использую структурированные массивы, я потеряю некоторую информацию.Например:

x = np.array([(1.0, 2), (3.0, 4), (11, 22)], dtype='float64')
y = np.array([(1.0, 2), (3.0, 4), (11, 22)], dtype=[('x', float), ('y', float), ('z', float)])

Оба массива содержат одинаковые данные и один и тот же тип dtype.к y можно получить доступ, используя имена столбцов:

yIn [155]: y['x']
Out[155]: array([ 1.,  3., 11.])

К сожалению, я теряю (или я получаю неправильное впечатление?) столь важные свойства, когда я использую структурированные массивы.x и y имеют разные формы, y нельзя транспонировать и т. д.

In [160]: x
Out[160]: 
array([[ 1.,  2.],
       [ 3.,  4.],
       [11., 22.]])

In [161]: y
Out[161]: 
array([( 1.,  2.), ( 3.,  4.), (11., 22.)],
      dtype=[('x', '<f8'), ('y', '<f8')])

In [162]: x.shape
Out[162]: (3, 2)

In [163]: y.shape
Out[163]: (3,)

In [164]: x.T
Out[164]: 
array([[ 1.,  3., 11.],
       [ 2.,  4., 22.]])

In [165]: y.T
Out[165]: 
array([( 1.,  2.), ( 3.,  4.), (11., 22.)],
      dtype=[('x', '<f8'), ('y', '<f8')])

Можно ли продолжать использовать "обычные двумерные массивы Numpy" и обращаться к столбцам, используя их имена?

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