2017-08-09 9 views
3

基本ベクトル化配列操作を含むNumPy .cファイルを検索しようとしています。例えば、a + 5のような配列へのスカラーの追加のような単純な処理を実行するとき、またはa.sum()のような集計を実行するときに、どのコードが実行されるかを知りたいと思います。私はndarrayオブジェクトgets declared hereを信じています。ベクトル化された配列操作のソースコードの場所と説明

また、BLASやLAPACKのような線形代数ライブラリのいずれかがこれらの基本的な算術演算に関係しているかどうかを知りたいですか?コードはforループをC配列で反復処理するのと同じくらいシンプルであるか、for-loopsなしで連続した配列に対してコンピュータが基本的な操作を行ういくつかの魔法の方法がありますか?

答えて

3

ほとんどのものはnumpy/core/src/umath/loops.c.srcです。 NumPyがたくさんの非常によく似たC関数を生成するために使用するテンプレートファイルです。 BLASまたはLAPACKコールは必要ありません。

+0

私にこれを指摘してくれてありがとう。ちょうど100%明確になる - numpyは、配列にスカラーを追加してそれらを合計するようなことをするために '通常の' for-loopを使用しますか? –

+0

私はそれをすべて一緒に結びつけることに近いと思う。サム配列メソッドは、[PyArray_GenericReduceFunction]を呼び出す[calculation.h](https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/calculation.c#L516)で定義されています。 https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/number.c#L199)。これは 'NumericOps'変数を使います。これは私が失われたところです。多くのメソッドは 'PyArray_SetNumericOps'で設定されているようですが、その関数がどこで呼び出されているのかわかりませんし、for-loopsへのリンクもわかりません。 –

+1

@TedPetrou:これはおそらくよく使われているforループと同じくらい規則的ではなく、必ずしもループのためのものではありませんが、ほとんどの繰り返しはforループで行われます。 'PyArray_SetNumericOps'については、' numpy 'のイニシャライザで[ここ](https://github.com/numpy/numpy/blob/e332ba4314bf874b1c7d17d82a2f1bf1766ece69/numpy/core/src/umath/umathmodule.c#L420) .core.umath'モジュール。 – user2357112

関連する問題