Привет.
Я бы хотел представить мой первый open source проект, размещённый на github. Это библиотека предоставляющая удобный и совершенно новый опыт работы с числовыми массивами в php. Вдохновением для создания послужила библиотека numoy на языке Python, которая включает широкий спектр возможностей для манипулирования данными и инструментами линейной алгебры.
Честно говоря, я был удивлён, когда обнаружил что на php до сих пор нет достойного аналога numpy. Конечно, некоторые попытки реализации можно найти на гитхабе, но они все крайне далеки от оригинала и не разделяют ту же идеологию. Моей целью было и есть создание похожей библиотеки, как минимум в отношении удобства использования и краткости синтаксиса. В дальнейших планах будет улучшение производительности.
В общем, приступим. Представьте, что у вас есть массив чисел, к примеру, представляющих собой значения температуры за какой-то период времени.
И вам для дальнейшей работы нужно из этого массива выбрать только те значения, когда температура была выше нуля. В классическом случае вы бы сделали что-то вроде такого:
В результате получим массив из 6 элементов. Но, для такой простой и тривиальной операции мы напечатали слишком много кода. Конечно, можно использовать краткие версии вроде array_walk или аналогичные, но, всё равно будет много явной логики.
Библиотека numphp же предоставляет простой, но, в то же время, богатый функционал по выборке данных из числового массива по условию. Для решение той же задачи, вы можете просто написать:
Вот так просто!
Более того, это только лишь начало. Вы можете манипулировать данным объектом как захотите и даже устанавливать значения по определённому условию.
Но постойте. До сих пор мы говорили только про выборку и изменение данных. А как насчёт математических операций? Хороший вопрос.
Давайте представим, вы создаёте RPG игру и у вашего героя есть какие-то способности, представленные в таком формате:
Теперь, во время повышения уровня, вы хотите увеличить каждую способность на определённый показатель. Опять же, как бы вы поступили без numphp?
Этот код работает, но разве он выглядит восхитительно? Вам нужно писать эти циклы раз за разом. Сравните это с элегантным решением библиотеки numphp:
Более того, вы можете объединить предыдущие две возможности и, скажем, увеличить только те способности, которые на данный момент имеют значение меньше 30:
Другая крутая возможность состоит в том, что вы можете выполнять математические операции и операции сравнения между двумя массивами всё в том же простом и понятном синтаксисе:
Как вы можете видеть, numphp предоставляет элегантный синтаксический сахар для рутинных операций с числовыми массивами. Я описал лишь главную идею и возможности библиотеки на данный момент. Дополнительно уже реализованы удобные хелперы вроде генераторов (массив нулей, единиц, диапазона и даже ряда Фибоначчи), random модуль и так далее.
Обратите внимание, библиотека находится только в самом начале своего развития и я планирую добавлять новые возможности. Самая главная из них на данный момент — возможность работы с n-мерными массивами (матрицами, к примеру) и выполнять все основные виды операций из линейной алгебры.
Дополнительные возможности и документацию вы можете найти здесь.
Также, если вы хотите внести свой вклад в развитие — буду рад обсудить любые вопросы.
Я бы хотел представить мой первый open source проект, размещённый на github. Это библиотека предоставляющая удобный и совершенно новый опыт работы с числовыми массивами в php. Вдохновением для создания послужила библиотека numoy на языке Python, которая включает широкий спектр возможностей для манипулирования данными и инструментами линейной алгебры.
Честно говоря, я был удивлён, когда обнаружил что на php до сих пор нет достойного аналога numpy. Конечно, некоторые попытки реализации можно найти на гитхабе, но они все крайне далеки от оригинала и не разделяют ту же идеологию. Моей целью было и есть создание похожей библиотеки, как минимум в отношении удобства использования и краткости синтаксиса. В дальнейших планах будет улучшение производительности.
В общем, приступим. Представьте, что у вас есть массив чисел, к примеру, представляющих собой значения температуры за какой-то период времени.
$list = [16, 22, -6, 23, -1, 13, 24, -23, 22];
И вам для дальнейшей работы нужно из этого массива выбрать только те значения, когда температура была выше нуля. В классическом случае вы бы сделали что-то вроде такого:
$result = [];
for($i=0; $i<count($list); $i++)
if ($list[$i] >= 0)
$result[] = $list[$i];
В результате получим массив из 6 элементов. Но, для такой простой и тривиальной операции мы напечатали слишком много кода. Конечно, можно использовать краткие версии вроде array_walk или аналогичные, но, всё равно будет много явной логики.
Библиотека numphp же предоставляет простой, но, в то же время, богатый функционал по выборке данных из числового массива по условию. Для решение той же задачи, вы можете просто написать:
// cast our array to the numphp array
$list = new np_array($list);
$result = $list[$list['> 0']];
Вот так просто!
Более того, это только лишь начало. Вы можете манипулировать данным объектом как захотите и даже устанавливать значения по определённому условию.
$list[$list['< 0']] = 0;
//result
[16, 22, 0, 23, 0, 13, 24, 0, 22]
Но постойте. До сих пор мы говорили только про выборку и изменение данных. А как насчёт математических операций? Хороший вопрос.
Давайте представим, вы создаёте RPG игру и у вашего героя есть какие-то способности, представленные в таком формате:
$powers = [62, 88, 34, 29];
Теперь, во время повышения уровня, вы хотите увеличить каждую способность на определённый показатель. Опять же, как бы вы поступили без numphp?
for($i=0; $i<count($powers); $i++)
$powers[$i]++;
Этот код работает, но разве он выглядит восхитительно? Вам нужно писать эти циклы раз за разом. Сравните это с элегантным решением библиотеки numphp:
$powers = $powers->add(1);
Более того, вы можете объединить предыдущие две возможности и, скажем, увеличить только те способности, которые на данный момент имеют значение меньше 30:
$powers = $powers[$powers['< 30']]->add(1);
Другая крутая возможность состоит в том, что вы можете выполнять математические операции и операции сравнения между двумя массивами всё в том же простом и понятном синтаксисе:
$powers = [62, 88, 34, 29];
$intensify = [2, 5, 4, 1];
$result = $powers->add($intensify);
//result
[64, 93, 38, 30]
Как вы можете видеть, numphp предоставляет элегантный синтаксический сахар для рутинных операций с числовыми массивами. Я описал лишь главную идею и возможности библиотеки на данный момент. Дополнительно уже реализованы удобные хелперы вроде генераторов (массив нулей, единиц, диапазона и даже ряда Фибоначчи), random модуль и так далее.
Обратите внимание, библиотека находится только в самом начале своего развития и я планирую добавлять новые возможности. Самая главная из них на данный момент — возможность работы с n-мерными массивами (матрицами, к примеру) и выполнять все основные виды операций из линейной алгебры.
Дополнительные возможности и документацию вы можете найти здесь.
Также, если вы хотите внести свой вклад в развитие — буду рад обсудить любые вопросы.