2017-08-09 37 views
3

我試圖找到包含基本向量化數組操作的NumPy .c文件。例如,我想知道當你做一些簡單的事情時,代碼會運行什麼,比如像a + 5這樣的數組的標量,或者執行一個像a.sum()這樣的聚合。我相信ndarray對象gets declared here向量化數組操作的源代碼位置和說明

我還想知道像BLAS或LAPACK這樣的線性代數庫是否包含這些基本的算術運算?代碼是否像循環遍歷C數組一樣簡單,或者是否有一些神奇的方式讓計算機在沒有for-loops的連續數組上進行基本操作?

回答

3

大部分東西在numpy/core/src/umath/loops.c.src。這是NumPy用來生成大量非常類似C函數的模板文件。不涉及BLAS或LAPACK呼叫。

+0

感謝您指點我。爲了100%清晰 - numpy使用'regular'for-loop來做一些事情,比如給數組添加標量和總結它們? –

+0

我想我已經把它們連在了一起。和數組方法在[[calculation.h]](https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/calculation.c#L516)中定義,它調用[PyArray_GenericReduceFunction]( https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/number.c#L199)。這使用了一個NumericOps變量。這是我迷失的地方。看起來許多方法都是用'PyArray_SetNumericOps'設置的,但我沒有看到函數被調用的地方,我不知道它如何鏈接到for循環。 –

+1

@TedPetrou:它不像你可能習慣的for循環那樣規則,它並不總是一個循環,但大部分迭代都是用for循環完成的。至於'PyArray_SetNumericOps',發生[這裏](https://github.com/numpy/numpy/blob/e332ba4314bf874b1c7d17d82a2f1bf1766ece69/numpy/core/src/umath/umathmodule.c#L420),在'numpy的初始化程序中.core.umath'模塊。 – user2357112