`numpy.dot`中的数组顺序

时间:2011-05-19 16:22:16

标签: python numpy

在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)这里的表现。欢呼声。

1 个答案:

答案 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