Как безопасно привести NumPy массив dtype 'object' к 'str', используя numpy .ndarray.astype? - PullRequest
0 голосов
/ 26 февраля 2020

Не уверен, почему происходит ошибка ниже. Это всего лишь пример. Длинная история состоит в том, что я манипулировал 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]:    
...