В документации для numpy.array()
указано значение параметра dtype
:
Требуемый тип данных для массива. Если не указан, то тип будет определен как минимальный тип, необходимый для хранения объектов в последовательности. ...
Это именно то, что здесь произошло. Вы ожидали, что массив сможет содержать значения str
и float
, как это делают обычные массивы Python;для этого dtype
должно быть object
. Поскольку вы не указали тип, вместо этого он выбрал отдельные символы:
>>> np.array(['2', '9'])
array(['2', '9'],
dtype='<U1')
И затем, когда вы попытались поместить -7.0
в один слот массива отдельных символов, он, должно быть, превратил его встрока '-7.0'
и используется только первый символ этого.
Так что укажите dtype
, который вы хотите для вашего массива при его создании. Если вы хотите получить некоторые из преимуществ производительности Numpy, возможно, вы захотите использовать dtype
с плавающей запятой и преобразовать ваши строки в числа с плавающей запятой до того, как поместите их в массив Numpy. Или вы можете сделать преобразование с помощью astype()
:
>>> np.array(['2', '9']).astype(float)
array([ 1., 2.])