Разреженное преобразование матрицы в C - PullRequest
0 голосов
/ 01 мая 2011

Я пытаюсь разработать программу на C для преобразования файла разреженной матрицы в плотную матрицу. Из того, что я прочитал, лучшим подходом было бы использование связанных списков, но у меня нет опыта работы с ними, и я не нашел хорошего онлайн-ресурса, объясняющего эту тему. Я не ищу быстрое решение, а скорее веб-сайт или текстовый источник, который может объяснить, как работает процесс, чтобы я мог применить его к этому проекту. Какие ресурсы я видел, предлагают использовать три массива для обработки значений в матрице (строка, столбец и отдельное значение) и два массива для вектора (один для строки, другой для столбца). Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 мая 2011

Формат файла, который вы указали для плотной матрицы. Матрица 10х10 с 100 элементами плотная. Разреженная матрица имеет меньше чем n * m элементов, и все «отсутствующие» элементы предполагаются равными 0. Смысл этого в том, чтобы матрицы, которые почти все равны нулю (что происходит во многих приложениях), будут использовать меньше пространство. Но использование формата разреженной матрицы для хранения плотной матрицы потребует гораздо больше места, чем простой массив.

Один распространенный формат файла с разреженной матрицей называется MatrixMarket и выглядит очень похоже на то, что вы описали. Первая строка имеет три значения, # строк, # столбцов, # ненулевых элементов (называемых nnz). Тогда у вас есть nnz строк фактических элементов в триплете: (row #) (column #) (value) Если ваша разреженная матрица находится в аналогичном формате, то вам не нужна никакая разреженная матрица в памяти. Просто отсканируйте значения и заполните свой плотный массив напрямую.

Если вы хотите иметь разреженную матрицу в памяти, есть несколько вариантов ее хранения. Тройняшки - это самое простое, и это просто версия файла MatrixMarket в памяти. 3 массива или 1 массив структур. Наиболее распространенная структура для операций линейной алгебры - Сжатые разреженные столбцы (CSC) или Сжатые разреженные строки (CSR). Я позволю вам разобраться с этим, но если вы хотите, чтобы реализация C играла с вами, вам следует взглянуть на Tim 100 * * * * * * * * * * * * * * *. Так же и MatLAB хранит разреженные матрицы. Тим был одним из тех, кто написал эту часть MatLAB.

0 голосов
/ 09 мая 2011

Похоже, что связанный список может быть не тем, что вы ищете, но этот сайт предлагает довольно обширное руководство по этой теме. Это может помочь пролить свет на то, подойдет ли это для вашей проблемы ... Удачи!

...