Nano Hash - криптовалюты, майнинг, программирование

Как я могу передать разреженную матрицу из Perl в R?

У меня есть очень разреженная матрица Perl (массив массивов), где значения undef эквивалентны нулям. Он имеет от 10 до 1000 строк и до 100 тыс. столбцов. Это выглядит как:

$ARRAY1 = [
            [
              ( undef ) x 1069,
              1,
              ( undef ) x 47,
              1,
              ( undef ) x 11,
              2,
              ( undef ) x 50,
              1,
              ( undef ) x 23,
              1,
              ( undef ) x 6033,
              ...
            ],
            [
              ...
            ],
            ...
          ]

... как я уже сказал - очень редко.

Я хочу использовать эту матрицу в сценарии R (см. предыдущий пост). Один из способов — распечатать таблицу в файл из Perl — по одной строке на строку, и печатать 0 каждый раз, когда мы сталкиваемся с undef.

Но, возможно, есть лучший, более компактный способ передать эту разреженную матрицу?

04.11.2010

Ответы:


1

Это умеренно сложная проблема.

Думаю, я бы начал с того, что сделал возможными простые вещи, перефразируя лозунг Perl:

  1. Узнайте о двух или трех пакетах разреженных матриц для R, таких как slam, SparseM, ....
  2. Выберите тот, который вам больше нравится, и научитесь эффективно строить разреженную матрицу, предположительно, из троек, таких как (x,y,value), для кодирования value в позиции (x,y).
  3. Напишите код Perl, чтобы передать вашу разреженную матрицу в этой форме во временный файл.
  4. Прочитайте этот временный файл в R и создайте свою разреженную матрицу.

Более изящная и быстрая межъязыковая сериализация может появиться позже. Это не тривиальная проблема.

04.11.2010
  • Если соответствующие пакеты разреженных матриц предоставляют интерфейс C или C++, вероятно, можно будет обернуть его для использования в Perl. OTOH, для этого потребуется не только знание Perl, R и C, но также XS и R-кишки, так что это, вероятно, не для слабонервных. 05.11.2010

  • 2

    Если вы печатаете эти нули в файл, это много ненужной печати для Perl и чтения и анализа для R. Более распространенный способ сериализации разреженной матрицы, такой как эта, — предоставить только размеры (при необходимости) и ненулевые элементы. индексы и значения. Таким образом, ваши промежуточные сериализованные данные могут выглядеть так:

    80000 200
    1069 0 1
    1117 0 1
    1129 0 2
    ...
    
    04.11.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..