Я пытаюсь определить максимальную длину элемента массива юникодов.Например, если у меня есть:
# (dtypes added for clarity)
a = np.array(['a'], dtype='U5')
print(get_dtype_length(a))
Я бы хотел напечатать 5
.
Я могу сделать что-то вроде:
def get_dtype_length(a):
dtype = a.dtype
dtype_string = dtype.descr[0][1] # == '<U5'
length = int(dtype_string[2:])
return length
Но этокажется окольным способом сделать вывод о том, что должно быть где-то доступно.Есть ли у меня атрибут или функция numpy, которая не смогла бы сделать это напрямую?
Уточнение на основе комментариев:
Я специально ищу максимально допустимую длинулюбого элемента в массиве, а не длины какого-либо конкретного элемента (например, не len(a[0]) == 1
. Мотивация этого заключается в том, что если я пытаюсь обновить что-то вроде a[0] = 'string_longer_than_dtype_of_a'
, я не хочу, чтобы элемент усекался доstri
.
В numpy версии 1.19 я считаю, что np.can_cast(newVal.dtype, a.dtype, casting='safe')
будет правильным тестом для моего варианта использования (как в 1.19 safe также будет проверять, приводит ли приведение к результатам усечения), но на самом деле это не такрешить вопрос о тестировании размера персонажа.