Как читать NUMPY файл .npz прямо в C # - PullRequest
1 голос
/ 25 апреля 2019

У меня загружено множество файлов данных в формате numpy .npz, написанных на python.Я хочу прочитать их непосредственно в C # по нескольким причинам.
Файлы данных содержат ряд одномерных массивов разных типов - некоторые будут байтовыми, а другие - двойными.Кто-нибудь может дать мне несколько советов о том, как этого добиться?Или иначе, что я мог бы сделать неправильно ниже?

Я пытался использовать Accord.NET.NPZFormat, но не могу понять, как заставить это работать.Я думаю, вероятно, потому что вы должны дать ему тип для возврата, и потому что массивы имеют разные типы, он терпит неудачу.Вот ссылка на него: http://accord -framework.net / docs / html / M_Accord_IO_NpzFormat_Load__1.htm

Я борюсь с синтаксисом здесь, не зная, что использовать в качестве "T",Самое близкое, что у меня есть, - это следующее, но, похоже, в результате нет никаких данных.У Accord.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);
};

1 Ответ

0 голосов
/ 25 апреля 2019

Я немного работаю с C # и python, и я рекомендую создать COM-сервер

http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html

тогда в 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 #

public void init_python()
{
    Type NPtoCSharp = Type.GetTypeFromProgID("NPtoCSharp");
    NPtoCSharpInst = Activator.CreateInstance(NPtoCSharp);
    NPtoCSharpInst.the_file = 'myfile.npz';
}

Не завершено, но я надеюсь, что вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...