Как обойти нелогичное поведение numpy - PullRequest
3 голосов
/ 25 мая 2020

рассмотрим следующее:

foo = np.array(['a', 'b', 2])

bar = [x for x in foo if isinstance(x, str)]

К моему большому удивлению, в результате получилось:

['a', 'b', '2']

Итак, 2 превратилась в строку. Я понимаю, что numpy предназначен для работы с однородными массивами, но все же это нежелательное поведение, и его было бы неплохо избежать. Есть предложения?

Ответы [ 2 ]

2 голосов
/ 25 мая 2020

Numpy предполагает str dtype в вашем случае. Передайте dtype явно, например:

foo = np.array(['a', 'b', 2], dtype=object)
bar = [x for x in foo if isinstance(x, str)]
0 голосов
/ 25 мая 2020

Я не уверен, в чем ваша проблема, но я думаю, вы хотите, чтобы в этом списке были только строки / символы букв / слов?

import numpy as np
lst = ['a' ,'b', 2]
# ['a', 'b', 2]
foo = np.array([each for each in lst if str(each).isalpha()])
# array(['a', 'b'], dtype='<U1')

Это гарантирует, что в неровном массиве будет только символ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...