将 Python 数据读入C++代码中
Read Python data into C++ code
我正在更新python代码和c ++代码,以便第二个可以读取从第一个传递的数据,在将其更新的数据重新发送到原始python代码之前使用它运行。 更准确地说: - 我的python文件制作了一个列表数据[2][5]:
data = [[Cij[0, 0],Cij[0,1],Cij[0,2],Cij[2,2],Cij[3,3]],[50,50,100,100,0]]
Cij 是浮动的,我想将其保存在 bin 文件中,在 C++ 中打开它并访问该数据以对其进行修改。 然后,我将修改后的数据保存到另一个 bin 文件中,以便在我的 python 代码上读取它。 我想使用尽可能少的外部库来做到这一点,因为代码的目的是使其公开如此易于使用。有什么想法吗?
我一直在运行数据错误,我的 C++ 代码从 bin 文件中读取似乎完全错误的数字。但是,第二部分(python从c ++生成的bin中读取修改后的数据(似乎有效。
我目前正在做的是使用 pickle 将数据转储到垃圾箱中,然后在 c++ 上访问它:
DataFile.open('Binpath', ios::binary|ios::in);
float data[2][5];
DataFile.read((char*)&data,sizeof(data));
但是当我在C++文件中打印数据时,它是完全错误的。
所以这里有一个完整的例子: 在python中,我正在写:
import pickle
data = [[1.1, 1.1, 1.1, 1.1], [2.2, 2.2, 2.2, 2.2]]
outfile = open("test.bin", 'wb')
pickle.dump(data, outfile)
outfile.close()
在 C++ 中:
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main() {
ifstream DataFile;
DataFile.open("test.bin", ios::binary|ios::in);
if(!DataFile.is_open()){
cout<< "error"<<endl;
}
float data[2][4] = {{0.0,0.0,0.0,0.0},{0.0,0.0,0.0,0.0}};
DataFile.read((char*)&data,sizeof(data));
for (int i = 0; i<4; i++){
cout << data[0][i]<< endl;}
for (int i = 0; i<4; i++){
cout << data[1][i]<< endl;}
cin.ignore();
DataFile.close();
return 0;
}
打印结果错误。
感谢您的任何帮助。
所以考虑 Python 数据数组
data = [[0.1, 0.2, 0.3, 0.4, 0.5], [50, 50, 100, 100, 0]]
要在C++中导入的 2D 数组。问题已经出在数据类型上:
type(data[0][0])
Out[6]: float
type(data[1][0])
Out[7]: int
如果要将其导入浮点数组,则需要将所有内容转换为浮点数。您可以使用array
包。但是,我们必须以存储多维数组的方式扁平化数组C++:
from array import array
dataArray = array('f', [item for sublist in data for item in sublist])
outputFile = open('outData', 'wb')
dataArray.tofile(outputFile)
outputFile.close()
在C++中,我们现在可以使用文件流从文件中读取浮点数
#include <fstream>
#include <iostream>
int main()
{
float data[2][5];
std::ifstream dataFile;
dataFile.open("outData", std::ios::binary | std::ios::in);
dataFile.read((char*)&data, sizeof(data));
dataFile.close();
for (int i = 0; i < 2; i++)
for (int j = 0; j < 5; j++)
std::cout << "(" << i << ", " << j << ") = " << data[i][j] << "n";
return 0;
}
输出
(0, 0) = 0.1
(0, 1) = 0.2
(0, 2) = 0.3
(0, 3) = 0.4
(0, 4) = 0.5
(1, 0) = 50
(1, 1) = 50
(1, 2) = 100
(1, 3) = 100
(1, 4) = 0
这只是一个概念的证明。当然,这可以做得更好...
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值