Основными проблемами, похоже, являются разделители и символы новой строки. Вы можете использовать np.array2string
и str.splitlines
для их разрешения:
import numpy as np
from ast import literal_eval
a = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]])
a_str = ''.join(np.array2string(a, separator=',').splitlines())
# '[[ 1.1, 2.2, 3.3], [ 4.4, 5.5, 6.6]]'
b = np.array(literal_eval(a_str))
# array([[ 1.1, 2.2, 3.3],
# [ 4.4, 5.5, 6.6]])
Обратите внимание, что без любых аргументов np.array2string
ведет себя как str
.
Если ваша строка задана и неизбежна, вы можете использовать этот хакерский метод:
a_str = str(a)
res = np.array(literal_eval(''.join(a_str.replace('\n', ' ').replace(' ', ','))))
array([[ 1.1, 2.2, 3.3],
[ 4.4, 5.5, 6.6]])
Согласно комментарию @ hpaulj, одним из преимуществ np.array2string
является возможность указать threshold
. Например, рассмотрим строковое представление x = np.arange(10000)
.
str(x)
вернет многоточие, например, '[ 0 1 2 ..., 9997 9998 9999]'
np.array2string(x, threshold=11e3)
вернет полную строку