NumPy有一些导入时间、编译时间或运行时选项,这些选项可以改变全局行为。其中大部分与性能或调试目的有关,绝大多数用户对此不感兴趣。
NumPy本身在函数调用期间通常被有意限制为单个线程,但是它确实支持同时运行多个Python线程。注意,对于performant linear algebra,NumPy使用了一个BLAS后端,比如OpenBLAS或MKL,它可以使用多个线程,这些线程可以由环境变量控制,比如 OMP_NUM_THREADS 取决于使用什么。控制线程数的一种方法是包 threadpoolctl
OMP_NUM_THREADS
在现代Linux内核上使用非常大的数组时,您可以在 transparent hugepage 已使用。透明hugepages的当前系统策略可以通过以下方式查看:
cat /sys/kernel/mm/transparent_hugepage/enabled
当设置为 madvise NumPy通常会使用hugepages来提高性能。可以通过设置环境变量来修改此行为:
madvise
NUMPY_MADVISE_HUGEPAGE=0
或者设置为 1 始终启用它。未设置时,默认为在内核4.6和更新版本上使用madvise。这些内核在hugepage支持下可能会经历很大的加速。此标志在导入时被选中。
1
默认情况下,允许类似数组的对象挂接到numpyapi的array函数协议当前处于启用状态。此选项自NumPy 1.16起就存在,默认情况下自NumPy 1.17起启用。可以使用以下方法禁用:
NUMPY_EXPERIMENTAL_ARRAY_FUNCTION=0
也见 numpy.class.__array_function__ 更多信息。此标志在导入时被选中。
numpy.class.__array_function__
这个 compile-time 环境变量:
NPY_RELAXED_STRIDES_DEBUG=0 NPY_RELAXED_STRIDES_CHECKING=1
控制NumPy如何报告数组的连续性。默认设置为启用,禁用调试模式。应始终启用此设置。设置debug选项对于测试用C编写的代码是很有意思的,这些代码在内存中可能是连续的,也可能不是连续的数组中进行迭代。大多数用户将没有理由更改这些;有关详细信息,请参阅 memory layout 文档。
在NUMPY1.20中,可以为测试目的启用新的实验性强制转换实现。要进行此设置:
NPY_USE_NEW_CASTINGIMPL=1
设置这个标志只对帮助NumPy开发以确保新版本没有bug有用,并且应该避免用于生产代码。对于创建自定义数据类型或使用复杂结构化数据类型的项目来说,这是一个有用的测试。该标志预计将在1.21中删除,新版本将一直在使用中。
numpy.distutils