Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将numpy.npz文件直接读入C#_C#_Python_Numpy - Fatal编程技术网

如何将numpy.npz文件直接读入C#

如何将numpy.npz文件直接读入C#,c#,python,numpy,C#,Python,Numpy,我有一大堆用python编写的numpy.npz格式的数据文件。 我想把它们直接读入C#有几个原因。 这些数据文件包含许多不同类型的1D数组——有些是按字节数组,有些是双数组。 有谁能给我一些关于如何做到这一点的建议吗?或者我在下面可能做错了什么 我尝试过使用Accord.NET.NPZFormat,但不知道如何使其工作。我认为可能是因为您必须给它一个要返回的类型,而且因为数组的类型不同,所以它会失败。 以下是它的链接: 在这里,我正在与语法作斗争,不确定用什么作为“T”。我得到的最接近的结果

我有一大堆用python编写的numpy.npz格式的数据文件。 我想把它们直接读入C#有几个原因。
这些数据文件包含许多不同类型的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来存储数组