2013-08-21 2 views
9

Я ищу способ сделать операции Matrix на PHP простым и эффективным способом.Как сделать операторы PHP Matrix легким/эффективным способом

Я хочу быть в состоянии сделать основные матричные операции, как инвертирование, Multiply, определителя, сложение, вычитание, решения линейных уравнений Ax = B, транспонирование и т.д.

Я смотрю на маленьких матриц размера (Матрица, которую я хочу инвертировать, не превышает 100x100, а векторы, которые я хочу размножать/транспонировать, могут достигать 1000x1).

Я нашел пакет PEAR Math_Matrix, но он кажется пренебрегаемым (я разрабатываю с E_STRICT, и он выдает много устаревших предупреждений). Другие ссылки, которые я нашел, в основном разбиты и не обновлены.

Я нашел пакет PHP пакета Lapack, но у него нет других операций, таких как умножение или вычитание или транспонирование.

Я знаю, что другой вариант - использовать интеграцию с другим программным обеспечением, таким как Octave или Sage, однако мы не совсем уверены, что хотим это сделать (финансовая команда презирает синтаксис Python и ИТ-команду, которая беспокоится о накладных расходах Octave).

Есть ли какая-либо отдельная библиотека, которую кто-либо использует для операций такого типа, которые имеют все основные операции и обновляются?

+0

PHP-порт JAMA является еще я знаю, что, безусловно, имеет некоторые из этих операций, но, вероятно, в равной степени от. Майкл Bommarito сделал [дополнение для полифитов] (http://php.livejournal.com/270125.html) для него, что также может быть полезно. Однако любая из этих более старых библиотек должна дать вам смелость математики –

+0

С точки зрения Octave/Sage, я думаю, было бы очень полезно узнать, какие матрицы вы ищете. Я предполагаю, что они имеют числа с плавающей запятой и что они не будут типами, которые плохо обусловлены для инверсии численно.Использование numpy (с или без Sage) может быть опцией - но опять же, обновление вопроса с помощью конкретного примера (возможно, ссылки на него) было бы действительно полезно. Естественно, R - еще один вариант. – kcrisman

+0

У меня еще нет матрицы для показа. Мы просто поднимаем требования/решения для предстоящего проекта =/Но да, они являются номерами с плавающей точкой. – Jimmy

ответ

2

Посмотрите на http://projects.moongate.ro/octave-daemon/

Некоторые из функций, которые могут снизить накладные расходы и убедить ИТ-команду:

  • Демон доступен через сеть, что означает, что вы можете переместить все процессы Octave на отдельный сервер, если вы решите, что вам нужно

  • Октавные процессы постоянны, а это означает, что: любые данные, которые были загружены или вычислены в прошлом, будут по-прежнему доступны для вновь подключенных c lients

  • Время запуска новых процессов Octave не влияет на клиентов.

  • Обеспечивает преобразования между октавными матрицами и массивами PHP.

+0

Я нашел это некоторое время назад, когда искал по одной теме. Вы использовали его в производстве? Является ли он надежным и без утечек памяти? – Jimmy

+0

Нет, я не использовал его, но некоторые функции интересны. Я бы поставил демона на собственный сервер с оптимизированным оборудованием для работы Octave. Сделайте этот сервер недоступным для Интернета и сохраните его в той же сети, что и веб-сервер. Это должно свести к минимуму проблемы. –

0

Я отвечаю на свой вопрос примерно год спустя.

Мы пошли на другой вариант, мы закодировали нашу собственную небольшую библиотеку на C++, и мы скомпилировали ее и добавили ее в php в качестве расширения. Это обеспечило лучшую производительность, и код оставался красивым.

$inverted = my_matrix_invert($matrixArray); 

Ищущие делать такого рода вещи должны смотреть здесь: http://www.php-cpp.com

Смежные вопросы