![]() |
|
![]() ![]() ![]() |
|
mrgloom |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
Допустим имеем обёртку вокруг BLAS на python (т.е. имеем numpy), можем ли руками написать ф-ии из LAPACK?(по минимуму мне надо eig, svd.)
я знаю про numpy.linalg.svd и numpy.linalg.eig так же там можно посмотреть сорцы, которые показывают в случае svd
, а в случае eig
но там правда есть ссылка на
Для чего всё это нужно: переписать стандартные функции из numpy (svd и eig) с использованием numpy.memmap и cudamat (тот же blas обертка вокруг cublas как я понимаю). Так же для поддержки больших матриц можно использовать блочное перемножение матриц (хотя может еще какие то ф-ии blas придется переделать? и я чего то не учёл?) Что точнее нужно: может быть есть lapack собранный только из вызовов blas? (так ли это и возможно ли это?) возможно есть примеры на других языках? (т.к. нет никакого желания разбираться в фортран коде и ф-иях с названиями типа dgemm) какие книги по линейной алгебре(для инженеров скорее, а не для математиков) лучше читать, которые более близки к реальности и рассказывают о подводных камнях(например вырожденные случаи (типа сингулярная матрица) или там потеря точности (типа таким методом никто не считает, а вот более точный) и т.д.), опять же учитывая, что blas и обёртки у нас уже есть и требуется написать только высокоуровневые алгоритмы. |
||||||
|
|||||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Даже интересно: а при чем здесь ветка "Алгоритмы"?
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
ну во-первых тут алгоритмы svd и eig и может кто то поделиться информацией, если их реализовывал руками.
а во-вторых нужна рекомендация книги по практической линейной алгебре, которая как бы тоже про алгоритмы. |
|||
|
||||
Pavia |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
mrgloom,
Если вопрос практический, то лучше его было задать в разделе питона. По поводу фортрана. Библиотеке LAPACk и BLAS есть написанные на Си. Если ручками, то честно даже не знаю что вам подсказать.
Из книг трудно подсказать могу вот автора подсказать Дж. Голуб. Если найдёшь свисни.
Проще стенку головой пробить. Чем разобраться как их сделать. По началу кажется просто. А потом выясняется что описание идёт с использованием терминов высшей математики. Приходиться её учит. Затем что процесс только итерационный QR. Как следствие бороться с устойчивостью. Что для симметричный матриц надо симметричность поддерживать. Что для действительных матриц оказываются решения бывают комплексные. А вот с ними я так и не разобрался. Толи есть там алгоритм, то ли его нет. А ещё у матриц при умножении их есть проблема с переполнением чисел Float даже на маленькой матрице 8х8 Поэтому все и пользуются готовым . А в готовых используется другой алгоритм нежели чем тот который описан в книгах. Так что помимо QR ещё и процесс(аглоритм) Грамма-Шмитта надо смотреть. |
||||||
|
|||||||
Фантом |
|
||||||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
Нет, и это невозможно.
Это тоже обертки исходного фортрановского кода. Это не настолько уж страшно, но все-таки здравое зерно в этом утверждении есть. При необходимости в написании софта такого рода куда проще (и полезнее для дела) разобраться в Фортране, чем пытаться наперекор судьбе чесать правой ногой левое ухо и реализовывать вычислительные алгоритмы на языке, совершенно не предназначенном для подобных задач. Я уж не говорю о том, что даже если почесаться удастся, то работающий результат из-за всех промежуточных оберток будет иметь производительность раз так в десять меньшую, чем нормальный код. |
||||||
|
|||||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
Нет не обёртка, а с транслированный код. Это вы просто программировать не умете. Язык этот как раз хорошо подходит для подобных задач. Нет обёртки влияют на производительность как 0.01-0.001 раз и то обычно даже ещё меньше. Нет никаких 10 раз. А вот Python не быстрый язык и писать на нём я бы не стал. Это сообщение отредактировал(а) Pavia - 26.6.2014, 05:30 |
|||
|
||||
mrgloom |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
ну так вот я и не понял, по сути blas это набор разных частных случаев перемножения матриц? что еще присутствует в lapack? какие то дополнительные ф-ии хэлперы? т.е. я не понимаю достаточно ли ф-ии из blas для использования их как минимальных неделимых кирпичиков для построение стандартных алгоритмов линейной алгебры? код действительно есть транслированный на С, но в нем так же сложно разобраться(ф-ии с 15 аргументами и т.д.) можно использовать прямой вызов http://docs.scipy.org/doc/scipy-dev/refere...inalg.blas.html http://wiki.scipy.org/PerformanceTips единственный способ похоже это поковыряться в самих ф-иях lapack тут кстати пишут, что
Это сообщение отредактировал(а) mrgloom - 26.6.2014, 09:24 |
||||
|
|||||
Фантом |
|
||||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
Вы исходники CBLAS когда-нибудь видели? Если нет - я покажу. Вот, например, cblas_dtbmv.c (случайно ткнул в первый попавшийся файл), начальные строки:
Как, похоже на самостоятельный код? Или все-таки на обертку?
![]() |
||||
|
|||||
Фантом |
|
||||||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
Практически да (еще сложения).
Поскольку в природе есть f2c, то формально получить код C несложно, но он будет, во-первых, почти нечитаем, во-вторых, неэффективен. Честно же писать все это заново на C желающих нет - долго, сложно и никому не нужно. |
||||||
|
|||||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
Появился вопрос как сравнить работу 2-х SVD алгоритмов, т.е. один точный стандартный, но медленный ,его берем за основу ,второй допустим использует некие аппроксимации и поэтому менее точный, но более быстрый.
1.Можно сравнить собственные векторы и значения: Тут показана разность полученных результатов:
2. Можно сравнить ошибку реконструкции изначальной матрицыhttp://en.wikipedia.org/wiki/Matrix_norm#Frobenius_norm 3. Можно проверить вектора на ортогональность. Но вопрос в том, какая точность\разность в выдаваемых значениях приемлема для реальных задач? Это сообщение отредактировал(а) mrgloom - 25.7.2014, 10:05 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |