В документации loadtxt
указано, что converters
должен содержать функции, которые специально возвращают числа с плавающей запятой :
преобразователей :dict, необязательно
Номер столбца отображения словаря в функцию, которая преобразует этот столбец в число с плавающей точкой.Например, если столбец 0 является строкой даты: converters = {0: datestr2num}.Конвертеры также можно использовать для предоставления значения по умолчанию для отсутствующих данных: convertters = {3: лямбда-ы: float (s или 0)}.По умолчанию: Нет.
Если вы хотите вместо этого целые числа, вам нужно разыграть числа с плавающей точкой, используя ключевое слово dtype
.
>>> numpy.loadtxt('th.txt', delimiter=',', usecols=(0, 2, 3), converters=dict(zip((0, 2, 3), (float, float, float))), dtype=([('i1', '<i4'), ('i2', '<f4'), ('i3', '<i4')]))
array([(1, 3.2000000476837158, 4), (1, 3.2000000476837158, 4),
(1, 3.2000000476837158, 4), (1, 3.2000000476837158, 4),
(1, 3.2000000476837158, 4), (1, 3.2000000476837158, 4),
(1, 3.2000000476837158, 4), (1, 3.2000000476837158, 4),
(1, 3.2000000476837158, 4)],
dtype=[('i1', '<i4'), ('f1', '<f4'), ('i2', '<i4')])
Конечно, вына самом деле в этом случае converters
не требуется - это действительно для преобразования произвольных строковых значений, таких как 'True'
, в числовые значения.Кроме того, если вы действительно хотите использовать простой двумерный массив вместо массива записей, не передавайте формат записи:
>>> numpy.loadtxt('th.txt', delimiter=',', usecols=(0, 2, 3), dtype=int)
array([[1, 3, 4],
[1, 3, 4],
[1, 3, 4],
[1, 3, 4],
[1, 3, 4],
[1, 3, 4],
[1, 3, 4],
[1, 3, 4],
[1, 3, 4]])
Но если вы сделаете это, вы не сможете указать формат по столбцу.