Не уверен, почему происходит ошибка ниже. Это всего лишь пример. Длинная история состоит в том, что я манипулировал numpy массивами dtype 'object' и хотел «зачеркнуть» некоторые целые числа в нем для записи в файл. Поэтому я использовал метод .astype (str), но затем он обрезал некоторые новые строки, которые я хотел добавить в массив, что побудило меня принять решение всегда хотеть работать с dtype = 'object'. Поэтому я хотел сделать x.astype ('str'). Astype ('object'), чтобы потом можно было добавлять больше строк без их усечения.
Но я хотел быть в безопасности, когда использую NumPy Функция astype, поэтому я хочу всегда использовать casting = 'safe'. Но почему-то происходит ошибка, почему это происходит?
TypeError: Невозможно привести массив из dtype ('O') к dtype ('U') согласно правилу 'safe'
Почему выдается ошибка с casting = 'safe', но позволяющим casting быть значением по умолчанию ('unsafe'), оно работает работает?
In [1]: import numpy as np
In [2]: x = [['abc']]
In [3]: x = np.array(x, dtype = 'object')
In [4]: x
Out[4]: array([['abc']], dtype=object)
In [5]: x.astype('str', casting = 'safe')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-e036b3323cdf> in <module>
----> 1 x.astype('str', casting = 'safe')
TypeError: Cannot cast array from dtype('O') to dtype('<U') according to the rule 'safe'
In [6]: x.astype('str')
Out[6]: array([['abc']], dtype='<U3')
In [7]: