我必须在Python中将非常大的2D数组乘以大约100次.每个矩阵由32000×32000元素组成.
我正在使用np.dot(X,Y),但是每次乘法都需要很长时间…在我的代码实例下面:
import numpy as np
X = None
for i in range(100)
multiplying = True
if X == None:
X = generate_large_2darray()
multiplying = False
else:
Y = generate_large_2darray()
if multiplying:
X = np.dot(X, Y)
还有其他方法快得多吗?
更新资料
这是显示htop界面的屏幕截图.我的python脚本仅使用一个内核.同样,在3h25m之后,仅完成了4次乘法.
更新2
我尝试执行:
import numpy.distutils.system_info as info
info.get_info('atlas')
但我收到了:
/home/francescof/.local/lib/python2.7/site-packages/numpy/distutils/system_info.py:564: UserWarning: Specified path /home/apy/atlas/lib is invalid. warnings.warn('Specified path %s is invalid.' % d) {}
因此,我认为它的配置不正确.
反之亦然,关于blas,我只收到{},没有任何警告或错误.
解决方法:
正如ali_m所建议的那样,使用BLAS库可以加快操作速度.但是,我系统中的问题是numpy的配置错误.解决方法如下:
1)确保具有所有必需的库(可以使用ATLAS,OpenBLAS等).自从在Ubuntu中直接受支持以来,我选择了ATLAS.
sudo apt-get install libatlas3gf-base libatlas-base-dev libatlas-dev
2)删除所有以前的numpy安装,例如pypm卸载numpy(如果您使用ActivePython安装了它)
3)使用pip重新安装numpy:pip install numpy
4)确保地图集正确链接:
import numpy.distutils.system_info as info
info.get_info('atlas')
ATLAS version 3.8.4 built by buildd on Sat Sep 10 23:12:12 UTC 2011:
UNAME : Linux crested 2.6.24-29-server #1 SMP Wed Aug 10 15:58:57 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
INSTFLG : -1 0 -a 1
ARCHDEFS : -DATL_OS_Linux -DATL_ARCH_HAMMER -DATL_CPUMHZ=1993 -DATL_USE64BITS -DATL_GAS_x8664
F2CDEFS : -DAdd_ -DF77_INTEGER=int -DStringSunStyle
CACHEEDGE: 393216
F77 : gfortran, version GNU Fortran (Ubuntu/Linaro 4.6.1-9ubuntu2) 4.6.1
F77FLAGS : -fomit-frame-pointer -mfpmath=387 -O2 -falign-loops=4 -Wa,--noexecstack -fPIC -m64
SMC : gcc, version gcc (Ubuntu/Linaro 4.6.1-9ubuntu2) 4.6.1
SMCFLAGS : -fomit-frame-pointer -mfpmath=387 -O2 -falign-loops=4 -Wa,--noexecstack -fPIC -m64
SKC : gcc, version gcc (Ubuntu/Linaro 4.6.1-9ubuntu2) 4.6.1
SKCFLAGS : -fomit-frame-pointer -mfpmath=387 -O2 -falign-loops=4 -Wa,--noexecstack -fPIC -m64
{'libraries': ['lapack', 'f77blas', 'cblas', 'atlas'], 'library_dirs': ['/usr/lib/atlas-base/atlas', '/usr/lib/atlas-base'], 'define_macros': [('ATLAS_INFO', '"\\"3.8.4\\""')], 'language': 'f77', 'include_dirs': ['/usr/include/atlas']}
标签:performance,matrix,arrays,python,numpy
来源: https://codeday.me/bug/20191121/2052699.html