1

我有一个包含双精度值数组的 file.cc,如下所示:

double values[][4] = {
  { 0.1234, +0.5678, 0.1222, 0.9683 },
  { 0.1631, +0.4678, 0.2122, 0.6643 },
  { 0.1332, +0.5678, 0.1322, 0.1683 },
  { 0.1636, +0.7678, 0.7122, 0.6283 }
  ... continue
}

如何将这些值导出到 Python 列表?

我无法触摸这些文件,因为它们属于外部库,可能会被修改。确切地说,我希望能够在不影响我的代码的情况下更新库。

4

2 回答 2

1

这在另一个 SO 帖子中得到了很好的回答。

但我会在这里补充一点。您需要定义一个类型,然后使用该in_dll方法。

从您的示例中,我使用values. 我希望你知道它有多大,或者可以从库中的其他变量中找出来,否则这是一个等待发生的段错误。

import ctypes
lib = ctypes.CDLL('so.so')
da = ctypes.c_double*4*4
da.in_dll(lib, "values")[0][0]
# 0.1234
da.in_dll(lib, "values")[0][1]
# 0.5678
da.in_dll(lib, "values")[0][2]
# 0.1222

从这里我将遍历它们并读入一个列表。

于 2013-05-13T15:30:37.103 回答
0

使用临时文件怎么样?用 C 将矩阵放入其中,然后用 python 读取它们。

在 file.cc 中,编写一个函数将矩阵保存到文件中。

int save_to_file(double matrix[][4],int row) {
    int i,j;
    FILE *fp;
    fp=fopen("tmp","w");
    for(i=0;i<row;i++)
        for(j=0;j<4;j++) {
            fprintf(fp,"%f",matrix[i][j]);
            if(j==3)
                fprintf(fp,"\n",matrix[i][j]);
            else
                fprintf(fp," ",matrix[i][j]);
        }
    fclose(fp);
    return 0;
}

并通过这样的 Python 脚本读取它们:

tmp=open('tmp')
L = []
for line in tmp:
    newline = []
    t = line.split(' ')
    for string in t:
        newline.append(float(string))
    L.append(newline)
tmp.close()

for row in L:
    for number in row:
        print "%.4f" %number
    print " "
于 2013-05-13T03:11:13.397 回答