Как восстановить двумерный массив numpy.array из строки байтов? - PullRequest
5 голосов
/ 23 августа 2011

numpy.array имеет удобный метод .tostring(), который дает компактное представление массива в виде строки байтов.Но как мне восстановить исходный массив из строки байтов?numpy.fromstring() создает только одномерный массив, а numpy.array.fromstring() нет.Похоже, я должен быть в состоянии предоставить строку, форму и тип, и идти, но я не могу найти функцию.

Ответы [ 3 ]

11 голосов
/ 24 августа 2011
>>> x
array([[ 0.   ,  0.125,  0.25 ],
       [ 0.375,  0.5  ,  0.625],
       [ 0.75 ,  0.875,  1.   ]])
>>> s = x.tostring()
>>> numpy.fromstring(s)
array([ 0.   ,  0.125,  0.25 ,  0.375,  0.5  ,  0.625,  0.75 ,  0.875,  1.   ])
>>> y = numpy.fromstring(s).reshape((3, 3))
>>> y
array([[ 0.   ,  0.125,  0.25 ],
       [ 0.375,  0.5  ,  0.625],
       [ 0.75 ,  0.875,  1.   ]])
0 голосов
/ 27 марта 2019

Обновление ответа Майка Грэма:

  1. numpy.fromstring амортизируется и должен быть заменен на numpy.frombuffer
  2. в случае complex чисел dtype должно быть определено явно

Таким образом, приведенный выше пример станет:

>>> x = numpy.array([[1, 2j], [3j, 4]])
>>> x
array([[1.+0.j, 0.+2.j],
       [0.+3.j, 4.+0.j]])
>>> s = x.tostring()
>>> y = numpy.frombuffer(s, dtype=x.dtype).reshape(x.shape)
>>> y
array([[1.+0.j, 0.+2.j],
       [0.+3.j, 4.+0.j]])
0 голосов
/ 23 августа 2011

Кажется, он не существует;Вы можете легко написать это самостоятельно, хотя:

def numpy_2darray_fromstring(s, nrows=1, dtype=float):
  chunk_size = len(s)/nrows
  return numpy.array([ numpy.fromstring(s[i*chunk_size:(i+1)*chunk_size], dtype=dtype)
                       for i in xrange(nrows) ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...