当numpy数组的类型不同时,numpy tobytes结果的格式是什么?

2024-09-27 21:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将pandas dataframe保存为二进制格式,以便在c++中读取它

我尝试了这样的tobytes方法:

In [2]: df = pd.DataFrame(np.reshape(range(25), (5,5)))

In [3]: df[0]=101.

In [4]: df['ticker'] ='nick'

In [5]: a = df.to_numpy()

In [6]: a
Out[6]: 
array([[101.0, 1, 2, 3, 4, 'nick'],
       [101.0, 6, 7, 8, 9, 'nick'],
       [101.0, 11, 12, 13, 14, 'nick'],
       [101.0, 16, 17, 18, 19, 'nick'],
       [101.0, 21, 22, 23, 24, 'nick']], dtype=object)

In [7]: a.tobytes()
Out[7]: b'0\x0f@\xfc\xf9\x7f\x00\x000iME\xfa\x7f\x00\x00PiME\xfa\x7f\x00\x00piME\xfa\x7f\x00\x00\x90iME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00\xf0\r@\xfc\xf9\x7f\x00\x00\xd0iME\xfa\x7f\x00\x00\xf0iME\xfa\x7f\x00\x00\x10jME\xfa\x7f\x00\x000jME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00p\x1dR\xf7\xf9\x7f\x00\x00pjME\xfa\x7f\x00\x00\x90jME\xfa\x7f\x00\x00\xb0jME\xfa\x7f\x00\x00\xd0jME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00p\x8f\xf8A\xfa\x7f\x00\x00\x10kME\xfa\x7f\x00\x000kME\xfa\x7f\x00\x00PkME\xfa\x7f\x00\x00pkME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00\xb0\x14\xf8\xf7\xf9\x7f\x00\x00\xb0kME\xfa\x7f\x00\x00\xd0kME\xfa\x7f\x00\x00\xf0kME\xfa\x7f\x00\x00\x10lME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00'
 ### !!!! what's here? both in binary or hex format, it can't be interpreted


In [8]: with open('a.bin', 'wb') as f:
   ...:     f.write(a.tobytes())
<>我不能用C++来读,这里是我的C++阅读代码:

#include <fstream>
#include <iostream>

using namespace std;

int main() {
  std::fstream f("a.bin", std::ios::binary | std::ios::in);
  if (!f.is_open()) { printf("open failed"); exit(1); }
  char buff[1024];
  f.read(buff, 1024);
  cout << *(float*)(buff + 0*sizeof(float)) << endl; // mess code, should be 101
} 

我不能理解字节输出,它似乎不是二进制或十六进制格式的101,你能帮我吗? 托比特斯做了什么


Tags: indf格式二进制opennickbuffstd
1条回答
网友
1楼 · 发布于 2024-09-27 21:23:30

您有一个object数组,其中包含一组指向Python对象的指针。您的tobytes输出由一组原始指针组成。数据从C++中完全不可恢复,因为没有指向数据的任何数据被保存。

相关问题 更多 >

    热门问题