Проблемы с удалением символа из списка в Python - PullRequest
0 голосов
/ 07 мая 2020

У меня есть следующий список массивов, полученный из этого фрагмента кода:

submission = []

for ele in regressor.predict(input_fn=lambda: input_fn(df_test, shuffle=False, batch_size=32)):
  submission.append(np.expm1(np.array(ele['predictions'])))

print(type(submission))

>>> <class 'list'>

Когда я распечатываю список, я получаю следующее:

[array([105527.99], dtype=float32), array([5416.8794], dtype=float32), array([174877.2], dtype=float32)]

Я хотел бы удалить скобки и получите чистый вывод. Итак, я пробовал несколько попыток заменить или вытащить их в al oop, но получал ошибки.

for a in submission:
  submission.append(a.pop(-1)) 
  # sub = a.replace("[", "")
  # submission = sub.replace("]","")
  print(submission)
  break

Вот ошибка:

AttributeError: 'numpy.ndarray' object has no attribute 'pop'

Пожалуйста, помогите удалить скобки, чтобы я мог получить чистый результат как, например, 105527.99, вместо того, что я получаю сейчас без очистки: [105527.99].

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Выбор первого индекса выполнит задание.

for a in submission:
    print(a[0])
0 голосов
/ 07 мая 2020

Прежде чем пытаться возиться с отображаемой строкой, попробуйте понять, что отображается. В Python дисплей обычно имеет некоторые ценные подсказки относительно содержимого.

У вас есть список numpy объектов массива, каждый с 1 элементом (shape (1,)):

In [224]: alist=[np.array([105527.99], dtype=np.float32), np.array([5416.8794], dtype=np.float32)]     
In [225]: alist                                                                                        
Out[225]: [array([105527.99], dtype=float32), array([5416.8794], dtype=float32)]

Если мы «обернем» список в np.array, мы получим массив фигур (n, 1). Обратите внимание на его отображение:

In [226]: np.array(alist)                                                                              
Out[226]: 
array([[105527.99  ],
       [  5416.8794]], dtype=float32)

Другой способ превратить такой список в один массив - объединить их (hstack отлично это делает):

In [227]: np.hstack(alist)                                                                             
Out[227]: array([105527.99  ,   5416.8794], dtype=float32)

Это 1d массив , форма (n,). tolist можно использовать, чтобы превратить его в список:

In [228]: np.hstack(alist).tolist()                                                                    
Out[228]: [105527.9921875, 5416.87939453125]

Остальные ответы берут число из каждого массива компонентов:

In [230]: [i.item() for i in alist]                                                                    
Out[230]: [105527.9921875, 5416.87939453125]
0 голосов
/ 07 мая 2020

Похоже, вы путаете объект с его строковым представлением. Попробуйте следующее:

for a in submission:
  out = str(a)
  out = out.replace("[", "")
  out = out .replace("]","")
  print(out)

Или, если вы уверены, что у вас есть только один элемент:

for a in submission:
  print(a[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...