在 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) 性能。干杯。
最佳答案
您所看到的可能与 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
关于python - `numpy.dot` 中的数组顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6061720/