如何将numpy.npz文件直接读入C#
我有一大堆用python编写的numpy.npz格式的数据文件。 我想把它们直接读入C#有几个原因。如何将numpy.npz文件直接读入C#,c#,python,numpy,C#,Python,Numpy,我有一大堆用python编写的numpy.npz格式的数据文件。 我想把它们直接读入C#有几个原因。 这些数据文件包含许多不同类型的1D数组——有些是按字节数组,有些是双数组。 有谁能给我一些关于如何做到这一点的建议吗?或者我在下面可能做错了什么 我尝试过使用Accord.NET.NPZFormat,但不知道如何使其工作。我认为可能是因为您必须给它一个要返回的类型,而且因为数组的类型不同,所以它会失败。 以下是它的链接: 在这里,我正在与语法作斗争,不确定用什么作为“T”。我得到的最接近的结果
这些数据文件包含许多不同类型的1D数组——有些是按字节数组,有些是双数组。 有谁能给我一些关于如何做到这一点的建议吗?或者我在下面可能做错了什么 我尝试过使用Accord.NET.NPZFormat,但不知道如何使其工作。我认为可能是因为您必须给它一个要返回的类型,而且因为数组的类型不同,所以它会失败。 以下是它的链接: 在这里,我正在与语法作斗争,不确定用什么作为“T”。我得到的最接近的结果是以下,但结果中似乎没有任何数据。IO没有示例代码
public static void LoadNPZ(string zip_file, string npz_file)
{
byte[] ret = new byte[0];
using (ZipArchive zip = ZipFile.OpenRead(zip_file))
{
foreach (ZipArchiveEntry entry in zip.Entries)
{
if (entry.Name == npz_file + ".npz")
{
Stream fs = entry.Open();
ret = new byte[fs.Length];
fs.Read(ret, 0, (int)fs.Length);
}
}
}
if (ret.Length==0)
{
return;
}
var ret2 = NpzFormat.Load<object[]>(ret);
};
publicstaticvoidloadnpz(字符串zip_文件,字符串npz_文件)
{
字节[]ret=新字节[0];
使用(ZipArchive zip=ZipFile.OpenRead(zip_文件))
{
foreach(zip.Entries中的ZipArchiveEntry条目)
{
if(entry.Name==npz_文件+“.npz”)
{
流fs=entry.Open();
ret=新字节[fs.Length];
fs.Read(ret,0,(int)fs.Length);
}
}
}
如果(ret.Length==0)
{
返回;
}
var ret2=净现值形式负荷(ret);
};
我经常使用C#和python,我的建议是创建一个COM服务器
然后在python中,您可以简单地使用
import numpy as np
class NPtoCSharp:
_reg_clsid_ = "{7CC9F362-486D-11D1-BB48-0000E838A65F}"
_public_methods_ = ['load_file']
_public_attrs_ = ['arr', 'the_file']
_reg_desc_ = "Python NPZ Loader"
_reg_progid_ = "NPtoCSharp"
def __init__(self):
self.arr = None
self.the_file = None
def load_file(self):
self.arr = np.load(self.the_file)
return self.arr
然后在C中#
不完整,但我希望您能理解。我经常使用C#和python,我的建议是创建一个COM服务器
然后在python中,您可以简单地使用
import numpy as np
class NPtoCSharp:
_reg_clsid_ = "{7CC9F362-486D-11D1-BB48-0000E838A65F}"
_public_methods_ = ['load_file']
_public_attrs_ = ['arr', 'the_file']
_reg_desc_ = "Python NPZ Loader"
_reg_progid_ = "NPtoCSharp"
def __init__(self):
self.arr = None
self.the_file = None
def load_file(self):
self.arr = np.load(self.the_file)
return self.arr
然后在C中#
不完整,但我希望您能理解。您必须使用.npz吗?或者您只是需要一种方法将其拉入C#?我只是需要一种方法将这些.npz文件中的数据拉入C#。谢谢我在以前使用pickle的一个项目中实现了以下答案。我可以确认它有效。你必须使用.npz吗?或者您只是需要一种方法将其拉入C#?我只是需要一种方法将这些.npz文件中的数据拉入C#。谢谢我在以前使用pickle的一个项目中实现了以下答案。我可以确认它是有效的。在将NPZ文件输入c#后,您是否有可能添加一些关于如何使用NPZ文件中的数据的内容?很抱歉回复太晚。我已经过渡到使用sqlite DB来存储阵列。在将NPZ文件导入c#之后,您可能会添加一些关于如何使用NPZ文件中的数据的内容。很抱歉,回复太晚了。此后,我开始使用sqlite DB来存储数组