所以我想幫助另一個SO用戶,並且在這個過程中,我無法創建一個Cython程序來執行一些簡單的NumPy外部操作,這迫使我使用GIL。這使得使用OpenMP(多核)成爲不可能。然後,我遇到了一個有趣的帖子,而您可以從SciPy Fortran庫直接導入用NumPy安裝的Cython代碼(BLAS,LAPACK),在我的情況下是英特爾MKL等效函數。我想要做的是一個簡單的向量乘以2個向量1000x1維度的另一個轉置,導致1000x1000矩陣。但是我找不到相關的Fortran程序(相當於NumPy乘法),它可以做到這一點。所有的例程似乎都做了矩陣乘法。所以現在在SciPy中很酷的功能是將它添加到您的Cython模塊中:import scipy.linalg.cython_blas as blas
和 cimport scipy.linalg.cython_lapack as lapack
然後理論上我開始使用Fortran庫dgemm
,通過調用blas.dgemm(options)
,但它執行的是矩陣乘積而不是元素乘法。有沒有人知道Fortan模塊可以完成2個1000x1矢量的簡單乘法,1個轉置,產生一個1000x1000的矩陣?如果你可以添加很好的輸入語法。我將C連續內存視圖傳遞給函數,即[:: 1] Cython NumPy向量。在使用NOGIL的Cython中使用Fortran NumPy操作,相當於NumPy乘法的Fortran庫是什麼?
2
A
回答
3
你所描述的是純粹的NumPy功能,稱爲"broadcasting"。這些廣播操作使用C(或Cython)代碼完成。您可以隨時通過Python C API(例如PyNumber_Multiply
)訪問它們(儘管它們可能不會釋放GIL),但Cython中的正常乘法應該委託給該函數,因此您通常不需要調用(或導入)它直接。
BLAS/LAPACK主要用於線性代數的東西,即使您可以「使用」暴露在那裏的功能,它也不會與NumPy使用的(通常)相同。
+0
謝謝你的閱讀材料。我相信可以使用Hadamard產品完成2個向量的元素乘法,但這僅在MKL中(即,我沒有在'scipy.linalg.cython_lapack'文件中看到定義)https://stackoverflow.com/a/29950051/6037118雖然如果您知道任何示例文件以顯示如何包含可以啓動我的MKL庫,那麼'vdmul'就是庫:https://software.intel.com/zh-cn/mkl-顯影劑基準FORTRAN-v-MUL – Matt
相關問題
- 1. 在Fortran中使用電源操作「**」和多次乘法運算
- 2. Fortran相當於
- 3. 在Cython中使用Numpy的PyArray_IsScalar
- 4. Python的zip(*)的numpy相當於什麼?
- 5. 在Cython和Boost.Python中擴展NumPy的相對優點是什麼?
- 6. Fortran相當於freopen
- 7. 用Cython和numpy的
- 8. numpy乘法不起作用
- 9. numpy tostring相當於numpy fromstring
- 10. Cython,C和Fortran
- 11. 使用數組在numpy中操作
- 12. C相當於Fortran名單
- 13. Cython用戶的Numpy類型
- 14. 擴展numpy的與用Cython
- 15. 什麼是FORTRAN * 77
- 16. Numpy np.einsum數組乘法使用多核
- 17. DATA TKX/2HKX/fortran在Fortran中的含義是什麼?
- 18. numpy的ndarray乘法
- 19. GNU Fortran語言的ctime相當於IBM XL FORTRAN
- 20. 在fortran中操作矩陣
- 21. 使用numpy數組元素的操作
- 22. 使用MPI_Gatherv Fortran的
- 23. 「%」在Fortran中的含義是什麼?
- 24. 編寫Fortran程序的Java相當於
- 25. Cython/numpy vs純numpy最小二乘擬合
- 26. 使用在用Cython字典,尤其是裏面nogil
- 27. 相當於在Numpy中使用#include <Numeric/arrayobject.h>
- 28. Python調用使用MPI的(fortran)庫
- 29. 乘兩個陣列使用numpy的
- 30. 在fortran中使用pthreads
您可能不需要這樣做。您可以將小GIL需要的部分封裝在'with gil:'塊中。乘法(可能)在內部再次釋放GIL,所以如果這是你希望做的事情,可能(可能)大部分與其他代碼並行運行。 – DavidW
@DavidW你說得對,我不必這樣做,但我想將它添加到我的Cython工具箱中......我一直在使用Python,任何可以加速OpenMP的東西都變得更好。從這個意義上說,將Fortan指針直接指向Scipy和Cython非常有吸引力。 – Matt