Почему удаление запятой в этом исходном файле приводит к скалярным данным в файле HDF5? - PullRequest
0 голосов
/ 13 января 2020
 f = h5.File("image_data.h5", 'w')
 f["horizontal_min"] = horizontal_min,
 f["horizontal_max"] = horizontal_max,
 f["vertical_min"] = vertical_min,
 f["vertical_max"] =  vertical_max,

приводит к

horizontal_max           Dataset {1}
horizontal_min           Dataset {1}
vertical_max             Dataset {1}
vertical_min             Dataset {1}

Но если запятые в конце каждой строки удаляются как в (вывод из h5ls):

 f = h5.File("image_data.h5", 'w')
 f["horizontal_min"] = horizontal_min
 f["horizontal_max"] = horizontal_max
 f["vertical_min"] = vertical_min
 f["vertical_max"] =  vertical_max

Я получаю следующее (вывод из h5ls):

  horizontal_max           Dataset {SCALAR}
  horizontal_min           Dataset {SCALAR}
  vertical_max             Dataset {SCALAR}
  vertical_min             Dataset {SCALAR}

Обратите внимание, что данные изменились с Dataset {1} на {SCALAR}. Обратите внимание, что запятая не меняет тип, как показано ниже:

  In [3]: type(5.0,)
  Out[3]: float

  In [4]: type(5.0)
  Out[4]: float

Почему происходит это изменение?

1 Ответ

2 голосов
/ 13 января 2020

В интерактивном ipython сеансе:

In [66]: 1,                                                                                               
Out[66]: (1,)
In [67]: 1                                                                                                
Out[67]: 1

С запятой значение равно tuple, которое h5py будет сохранено как массив 1d. Без запятой это скаляр.

В Python запятая является частью синтаксиса tuple; важнее, чем (). Это не лишнее окончание строки. (; - необязательный конец строки).

Правильный способ выполнить ваш последний тест:

In [71]: x=1,                                                                                             
In [72]: type(x)                                                                                          
Out[72]: tuple
In [73]: x=1                                                                                              
In [74]: type(x)                                                                                          
Out[74]: int

В type(1,) запятая является частью кортежа аргументов. type принимает 1 или 3 аргумента.

тип (имя_объекта, base, dict)

...