Как изменить тип массива numpy со строки на bool? - PullRequest
1 голос
/ 09 марта 2020

У меня есть массив numpy, где он представляет собой массив строк, которые говорят 'true' и 'false'. Как бы я изменил его в логический массив? Код:

from astropy.table import Table
import numpy as np

cat = '/home/myname/catalogue.csv'  
cat = Table.read(cat, format="ascii")

check = np.array(cat['IsTrue'])

В настоящий момент выводится столбец check:

   ['true', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
   'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
   'false', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'false', 'true',
   'true', 'true', 'true', 'true', 'false', 'true', 'true', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'false', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'true', 'false',
   'true', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
   'true', 'true', 'true', 'true', 'true', 'true', 'true', 'true']

Опять же, как мне преобразовать этот массив строк в логический массив?

Ответы [ 3 ]

2 голосов
/ 09 марта 2020

Вы можете попробовать следующее, и оно должно работать,

np.array(check)=='true'
0 голосов
/ 10 марта 2020

Я обнаружил, что работает следующее:

check = (check == "true")
0 голосов
/ 10 марта 2020

Если check является массивом numpy

check = np.array(['true', 'true', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true',
                  'true', 'false', 'true', 'true', 'true', 'true', 'true', 'true'])

, тогда вы можете использовать eval(), capitalize() и tolist(), объединенные в одну строку

check = np.array([eval(i.capitalize()) for i in check.tolist()])

print(check)
print(type(check[0]))

Вывод:

[ True  True  True  True  True  True  True  True  True False  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  False  True  True  True  True  True  True  True  True  True  True  True
  True  True False  True  True  True  True  True False  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True False  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True False  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True]
  <class 'numpy.bool_'>
...