Итак, ваш фрейм данных:
In [129]: asDF
Out[129]:
0.00 0.25 0.50 0.75 1.00
-10.0 0.161848 0.381348 0.274634 0.207572 0.620306
-7.5 0.397057 0.291996 0.641298 0.091828 0.143980
-5.0 0.571381 0.933822 0.323190 0.979055 0.749772
-2.5 0.389751 0.907248 0.971688 0.395117 0.135636
0.0 0.860973 0.614596 0.302016 0.991079 0.498841
, а форма повторного массива включает индексы строк в качестве дополнительного поля (это необязательно):
In [130]: DFasRec
Out[130]:
rec.array([(-10. , 0.16184848, 0.38134831, 0.27463366, 0.20757185, 0.62030599),
( -7.5, 0.39705653, 0.291996 , 0.64129751, 0.09182781, 0.14398041),
( -5. , 0.57138102, 0.9338216 , 0.32318977, 0.97905532, 0.74977176),
( -2.5, 0.38975072, 0.90724842, 0.97168799, 0.39511716, 0.13563595),
( 0. , 0.86097342, 0.61459591, 0.30201566, 0.99107931, 0.49884148)],
dtype=[('index', '<f8'), ('0.0', '<f8'), ('0.25', '<f8'), ('0.5', '<f8'), ('0.75', '<f8'), ('1.0', '<f8')])
In [131]: DFasRec.dtype.names
Out[131]: ('index', '0.0', '0.25', '0.5', '0.75', '1.0')
имена столбцов находятся в dtype
, но не в самих данных массива.
С простым arr1 = np.frombuffer(RecAsStr)
:
In [132]: arr1
Out[132]:
array([-10. , 0.16184848, 0.38134831, 0.27463366,
0.20757185, 0.62030599, -7.5 , 0.39705653,
0.291996 , 0.64129751, 0.09182781, 0.14398041,
-5. , 0.57138102, 0.9338216 , 0.32318977,
0.97905532, 0.74977176, -2.5 , 0.38975072,
0.90724842, 0.97168799, 0.39511716, 0.13563595,
0. , 0.86097342, 0.61459591, 0.30201566,
0.99107931, 0.49884148])
Это всего лишь 1d массив;это работает (пока), потому что все поля были плавающими, а тип загрузки по умолчанию - float. Этот буфер не имеет информации о dtype!
Reshape позволяет нам восстановить 2d массив со значениями индекса строки.
In [133]: arr1.reshape(-1,6)
Out[133]:
array([[-10. , 0.16184848, 0.38134831, 0.27463366,
0.20757185, 0.62030599],
[ -7.5 , 0.39705653, 0.291996 , 0.64129751,
0.09182781, 0.14398041],
[ -5. , 0.57138102, 0.9338216 , 0.32318977,
0.97905532, 0.74977176],
[ -2.5 , 0.38975072, 0.90724842, 0.97168799,
0.39511716, 0.13563595],
[ 0. , 0.86097342, 0.61459591, 0.30201566,
0.99107931, 0.49884148]])
Этот маршрут bytes
не хранит никакой информации dtype
,Я думаю, что это должно быть сохранено (или восстановлено) отдельно.
Например:
In [146]: str(DFasRec.dtype)
Out[146]: "(numpy.record, [('index', '<f8'), ('0.0', '<f8'), ('0.25', '<f8'), ('0.5', '<f8'), ('0.75', '<f8'), ('1.0', '<f8')])"
In [147]: dt = np.dtype(eval(_))
In [148]: dt
Out[148]: dtype((numpy.record, [('index', '<f8'), ('0.0', '<f8'), ('0.25', '<f8'), ('0.5', '<f8'), ('0.75', '<f8'), ('1.0', '<f8')]))
In [149]: np.frombuffer(RecAsStr, dt)