在Python的numerical library NumPy中,numpy.dot
函数如何处理不同内存顺序的数组? numpy.dot(c-order, f-order)
与dot(f-order, c-order)
等。
我问的原因是很久以前(numpy 1.0.4?),我做了一些测试,发现numpy.dot
表现比直接从dgemm
调用scipy.linalg
更糟糕了正确的转置标志,虽然两者都在内部调用相同的BLAS库。 (我怀疑原因是复制numpy.dot
内的输入矩阵,如果输入很大,那就很悲惨。)
现在我再次尝试,实际上numpy.dot
执行与dgemm
相同的操作,因此没有理由按特定顺序保留数组并手动设置转置标记。更干净的代码。
所以我的问题是,最近(让我们说1.6.0)numpy.dot
如何工作,保证什么时候复制,什么时候不复制?我关心的是1)记忆2)这里的表现。欢呼声。
答案 0 :(得分:1)
您可能看到的可能是与静默捕获和处理的blas优化点导入错误相关(此代码段来自numeric.py)
# try to import blas optimized dot if available
try:
# importing this changes the dot function for basic 4 types
# to blas-optimized versions.
from _dotblas import dot, vdot, inner, alterdot, restoredot
except ImportError:
# docstrings are in add_newdocs.py
inner = multiarray.inner
dot = multiarray.dot