Numpy парсинг на ndarray из строки - PullRequest
2 голосов
/ 19 марта 2020

Я перевел строку ndarray с сервера на клиентскую сторону. Пример этого массива можно увидеть ниже

import numpy as np

str_array = "[[0.1233 0.333 4.1111] [0.1233 0.333 4.1111] [0.1233 0.333 4.1111]]"
arr = np.fromstring(str_array, dtype=np.float32, sep = ' ')

print(arr)

, когда я запускаю этот код, выдается сообщение об ошибке:

  File "example.py", line 89, in <module>
    arr = np.fromstring(str_array, dtype=np.float32)
ValueError: string size must be a multiple of element size

Я хочу, чтобы мой строковый массив снова стал ndarray. Как я могу решить это?

Ответы [ 2 ]

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

Используйте numpy.matrix и затем reshape

>>> np.matrix(str_array).reshape(-1,3)
matrix([[0.1233, 0.333 , 4.1111],
        [0.1233, 0.333 , 4.1111],
        [0.1233, 0.333 , 4.1111]])

Или для получения ndarray используйте атрибут matrix.A

>>> np.matrix(str_array).reshape(-1,3).A
array([[0.1233, 0.333 , 4.1111],
       [0.1233, 0.333 , 4.1111],
       [0.1233, 0.333 , 4.1111]])
1 голос
/ 19 марта 2020

Замечу, что в документации сказано, что np.fromstring() "Вернуть новый 1-D массив, инициализированный из необработанных двоичных или текстовых данных в строку."

Если вы знаете размеры ваш массив, один простой обходной путь для факта, что ваши данные 2D, будет просто:

str_array = str_array.replace("]", "")
str_array = str_array.replace("[", "")
np.fromstring(str_array, sep=' ').reshape(3,3)

, который дает:

array([[0.1233, 0.333 , 4.1111],
       [0.1233, 0.333 , 4.1111],
       [0.1233, 0.333 , 4.1111]])
...