2014-12-03 101 views
0

我在C#二维锯齿形双阵列,其余转换为一个字节数组这样的:反序列化在C#创建的字节数组在Python

byte[][][] byteArray = new byte[10][][]; 

我保存字节数组作为在此的二进制文件方法:

BinaryFormatter formatter = new BinaryFormatter(); 
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write)) 
{ 
    formatter.Serialize(stream, byteArray); 
} 

现在,我需要以重新构建有双模双阵列读取该文件在python ...

我试图用numpy.fromfile(),并想知道这应该如何完成。

+0

很肯定的BinaryFormatter是它系列化对象的方法专利。你很可能需要看看你放入什么以及如何写入文件。然后编写一个自定义的python util来读取该文件。这只是它只写了字节而不写入一堆元数据。 – TyCobb 2014-12-03 17:29:00

回答

1

从我所知道的,BinaryFormatternumpy.fromfile()不是跨越平台,更不用说语言了。使用更像JSON的跨平台格式会更容易。将double转换为byte[]的部分也可能有问题,例如,由于字节顺序。如果性能和数据要求不是真正的问题,则不会使事情复杂化。

此示例使用Json.NET为C#:

double[][] myArray = // whatever 

var path = // whatever 
using (StreamWriter file = File.CreateText(path)) 
{ 
    JsonSerializer serializer = new JsonSerializer(); 
    serializer.Serialize(file, myArray); 
} 

然后在Python中的所有您需要做的是一样的东西:

import numpy 
import json 
path = # whatever 
with open(path) as f: 
    myArray = numpy.array(json.load(f)) 
# we now have the array! e.g. 
print(myArray.dtype) # float64 
print(myArray[0][0]) # 0.79449418131 
+0

谢谢蒂姆S.还有一个问题。那我怎么才能打开像这样创建的文件就像一个双数组? – betelgeuse 2014-12-04 10:01:43

+0

我想我有: '使用(StreamReader流=新的StreamReader(路径)){ string strArray = stream.ReadToEnd(); myArray = JsonConvert.DeserializeObject (strArray); }' – betelgeuse 2014-12-04 10:16:40

+0

是的,这将工作。你可以按照http://james.newtonking.com/json/help/html/DeserializeWithJsonSerializerFromFile.htm中的例子跳过中间的'string'(类似于我在序列化时跳过任何中间字符串的方式)。我推荐这个,因为它应该可以提供更好的性能。 – 2014-12-04 12:49:46