Numphp-数値配列を操作するためのライブラリ

こんにちは

githubでホストされている最初のオープンソースプロジェクトを紹介したいと思います。 これは、PHPで数値配列を操作する際に便利で完全に新しいエクスペリエンスを提供するライブラリです。 作成のインスピレーションは、Pythonのnumoyライブラリでした。これには、データおよび線形代数ツールを操作するための幅広い可能性が含まれています。

正直なところ、phpにはまだnumpyのまともな類似物がないことに気付いたときは驚きました。 もちろん、いくつかの実装の試みはgithubで見つけることができますが、それらはすべて元のものから非常に遠く、同じイデオロギーを共有していません。 私の目標は、少なくとも使いやすさと構文の簡潔さに関して、同様のライブラリを作成することでした。 将来の計画はパフォーマンスを改善します。

一般的に、始めましょう。 たとえば、一定期間の温度値を表す数値の配列があるとします。

$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); 

さらに、前の2つの可能性を組み合わせて、たとえば現在30未満の値を持つ能力のみを増やすことができます。

 $powers = $powers[$powers['< 30']]->add(1); 

もう1つのクールな機能は、2つの配列間ですべて同じ単純で明確な構文で数学および比較演算を実行できることです。

 $powers = [62, 88, 34, 29]; $intensify = [2, 5, 4, 1]; $result = $powers->add($intensify); //result [64, 93, 38, 30] 

ご覧のとおり、numphpは、数値配列を使用したルーチン操作のためのエレガントな構文糖衣を提供します。 現時点では、ライブラリの主なアイデアと可能性のみを説明しました。 さらに、ジェネレーター(ゼロ、1、範囲、フィボナッチ数列の配列)、ランダムモジュールなどの便利なヘルパーが既に実装されています。

ライブラリは開発のごく初期段階にあるため、新しい機能を追加する予定です。 現時点で最も重要なのは、n次元配列(行列など)を操作し、線形代数からすべての主要な操作を実行できることです。

追加の機能とドキュメントはこちらにあります

また、開発に貢献したい場合は、問題について話し合うことができます。

Source: https://habr.com/ru/post/J347470/


All Articles