Pull to refresh
9
0

Пользователь

Send message
ага, именно так. вдохновлялся numpy. Сейчас пишу на пайтоне и очень радуюсь этой либе.
Поэтому была идея сделать аналог в базовом виде на php.
вообще php-cpp выглядит захватывающе. была бы мотивация, а переделать на нативное расширение — дело техники.
Краткую мотивацию описывал в первой статье: habrahabr.ru/post/347470
Что б не повторяться…
Пока что нет, думаю этот процесс может быть крайне долгим, учитывая текущее состояния языка и его переход активный на php 7+.
Вообще планировалось предоставить классический подход к использованию зависимостей через composer.

Работа над производительностью будет дальнейшим шагом в развитии библиотеки.
Если кому интересно, я добавил базовую поддержку работы с матрицами в библиотеку: numphp (раздел readme про матрицы).
Кратко:

$matrix = new np_array([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]);

// matrix
[[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]]


$result = $matrix->mul(5);

//result
[[0, 5, 10, 15],
[20, 25, 30, 35],
[40, 45, 50, 55]]


Ну, и, конечно, различные комбинации. Например: максимальное из всех чисел в матрице, меньше 6

$result = $matrix[$matrix->lt(6)]->max();


Чуть позже будет подробная запись, когда доработаю остальные методы по работе с матрицами, типа суммирование, нахождение среднего, генераторы и так далее.
Это похоже не дело принципа =) обход массива с заданным шагом — классическая задача for массива. это значительно более читабельно чем $i % 100. более того, foreach будет проходить и сравнивать каждый элемент, хотя это не оптимально, а for не тратит время на это, более того, не создаёт $value переменную каждый раз, тратя на это ресурсы.
В любом случае, $list['>0'] — малая часть возможностей библиотеки =)
Математические операции над векторами — частая задача.
В ближайших планах — быстрый и удобный способ получить среднее значение, медиану или сумму всех элементов. $list->mean() и погнал дальше.
да, ещё. булевые маски полезны в случае если нужно выбрать более гибко по индексам. К примеру из массива из 10 элементов выбрать только 1ый, 3-ий, 6-ой и 9-ый элементы.

$list[[false, true, false, true, false, false, true, false, false, true, false]];
Здесь нужно понимать, что это — отдельный тип данных, не классический массив.
И если немного расширить понятие индексации, то тут — обращение к конкретным элементам. Если так воспринимать, тогда не возникает недоразумений
Могу согласиться с тем, что такой синтаксис непривычен. Но тут, как всегда, дело контекста.
если вы работаете в проекте где все знают что используется либа numphp и мы с ней знакомы, то проблем не будет. Более того, IDE подсветит что это объект.
Опять же, если кому крайне непривычно, можно использовать явный синтаксис: $list->gt(0);
можно. но при работе в области data science, machine learning такие операции нужно делать по 100 раз в день с разными условиями и так далее. Массажирование данных, так сказать.
мне больше бы импонировао, если бы приняли вот это: wiki.php.net/rfc/operator-overloading
по сути, часть библиотеки и представляет собой отдельные методы-хелперы, которые потом можно компоновать как угодно, так как они возвращают одинаковые типы данных: np_array в данным случае.
методы all, any, кстати, в ближайших планах тоже ;)
Конечно, такой вариант я рассматривал.но:

1. это противоречит подходу, реализованному в numpy библиотеки и этому есть веская причина:
2. $list->gt(25) вернёт массив, называемый булевой маской: [false, false, true, true, false, true], где false — элемент в этой позиции НЕ удовлетворяет условию, true — удовлетворяет.

Преимущество такого подхода заключается в том, что такие булевые маски позволяют очень гибко выбрать элементы из массив и в дополнение их можно комбинировать и делать их логическое объединение:

$result = $list[operator::b_and($list->gte(5), $list->lt(8))];

// or

$result = $list[operator::b_and($list['>= 5'], $list['< 8'])];


к моему сожалению, в php нельзя переопределить операторы, иначе синтаксис получился бы значительно красивее:

$list[$list > 25];

// and

$result = $list[($list >= 5) & ($list < 8)];
если настолько сильно не нравится вуду-магия, можете использовать явный синтаксис =)

$result = $list[$list->gt(25)];


Но вообще это синтаксический сахар для того, что бы подобные конструкции занимали меньше места и были читаемыми.
да, спасибо большое. Это имеет место быть. В последнее время пишу на python и там другие соглашения и глаз уже радуется python-style, а php-style не нравится. НО раз это php либа — нужно следовать psr )
Совершенно верно. Особенно важно учитывать что в задачах связанных с data mining, machine learning, deep learning, такие вещи повторяюсь из раза в раз и тратить время рутинные циклические операции не стоит вообще
Честно говоря, для High Load конфы доклад содержит ну уж очень много воды и очевидных вещей. Более того всё как-то очень абстрактно…
https://console.cloud.google.com работает по Realistic UI, по сути. Должен сказать что это по началу очень непривычно, когда система принимает мой запрос, но при этом позволяет заниматься другими делами, пока он выполняется. При этом визуально только небольшой лоадер в шапке страницы и на кнопке…

Information

Rating
Does not participate
Date of birth
Registered
Activity