相关疑难解决方法(0)

'python setup.py install'和'pip install'之间的区别

我有一个外部包我想从tar文件安装到我的python virtualenv中.安装包的最佳方法是什么?

我发现了两种方法可以做到:

  1. 解压缩tar文件,然后python setup.py install在解压缩的目录中运行.
  2. pip install packagename.tar.gz来自https://pip.pypa.io/en/stable/reference/pip_install/#examples中的示例#7

如果用这两种方式做它们有什么不同.

python pip virtualenv setup.py

84
推荐指数
3
解决办法
4万
查看次数

将ATLAS/MKL链接到已安装的Numpy

TL; DR如何在没有重建的情况下将ATLAS/MKL链接到现有的Numpy.

我用Numpy用大矩阵计算,我发现它非常慢,因为Numpy只使用1个核心进行计算.经过大量的搜索,我发现我的Numpy没有链接到像ATLAS/MKL这样的优化库.这是我的numpy配置:

>>>import numpy as np
>>>np.__config__.show()
blas_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
lapack_info:
    libraries = ['lapack']
    library_dirs = ['/usr/lib']
    language = f77
atlas_threads_info:
    NOT AVAILABLE
blas_opt_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
atlas_blas_threads_info:
  NOT AVAILABLE
openblas_info:
  NOT AVAILABLE
lapack_opt_info:
    libraries = ['lapack', 'blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
atlas_info:
  NOT AVAILABLE
lapack_mkl_info:
  NOT AVAILABLE
blas_mkl_info:
  NOT AVAILABLE
atlas_blas_info:
  NOT AVAILABLE
mkl_info: …
Run Code Online (Sandbox Code Playgroud)

python performance numpy linear-algebra blas

21
推荐指数
1
解决办法
2万
查看次数

使用numpy进行多处理会使Python在OSX上意外退出

当遇到numpy运行多处理时,我遇到了一个问题,即Python意外退出.我已经解决了这个问题,所以我现在可以确认在运行下面描述的代码时多处理工作是完美的:

import numpy as np
from multiprocessing import Pool, Process
import time
import cPickle as p

def test(args):
    x,i = args
    if i == 2:
        time.sleep(4)
    arr = np.dot(x.T,x)
    print i

if __name__ == '__main__':
    x = np.random.random(size=((2000,500)))
    evaluations = [(x,i) for i in range(5)]
    p = Pool()
    p.map_async(test,evaluations)
    p.close()
    p.join()
Run Code Online (Sandbox Code Playgroud)

当我尝试评估下面的代码时会出现问题.这使Python意外退出:

import numpy as np
from multiprocessing import Pool, Process
import time
import cPickle as p

def test(args):
    x,i = args
    if i == 2:
        time.sleep(4)
    arr = np.dot(x.T,x) …
Run Code Online (Sandbox Code Playgroud)

python macos numpy multiprocessing

13
推荐指数
2
解决办法
2873
查看次数

导入numpy时出错:lapack_lite.so:未定义的符号

在我的Kubuntu(x86)升级到14.04之后,我在nthony中没有使用python 2.7:

Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
 Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/prylipko/.local/lib/python2.7/site-packages/numpy/__init__.py", line 137, in <module>
    import add_newdocs
  File "/home/prylipko/.local/lib/python2.7/site-packages/numpy/add_newdocs.py", line 9, in <module>
    from numpy.lib import add_newdoc
  File "/home/prylipko/.local/lib/python2.7/site-packages/numpy/lib/__init__.py", line 13, in <module>
    from polynomial import *
  File "/home/prylipko/.local/lib/python2.7/site-packages/numpy/lib/polynomial.py", line 17, in <module>
    from numpy.linalg import eigvals, lstsq
  File "/home/prylipko/.local/lib/python2.7/site-packages/numpy/linalg/__init__.py", line 48, in …
Run Code Online (Sandbox Code Playgroud)

ubuntu numpy python-2.7

11
推荐指数
1
解决办法
4947
查看次数

Numpy与ATLAS或OpenBLAS?

在花了大量时间从源代码构建ATLAS之后,我在OpenSUSE 13.1存储库中发现了libopenblas和libatals.我的问题是

  1. 是否易于安装(无需在您自己的计算机上进行调整)存储库中的"libatlas"真的能提高计算性能吗?

  2. OpenBLAS比ATLAS更好还是只比Linux中的易安装"libatlas"更好?请参阅更快的R使用OpenBLAS:比ATLAS更好,切换到Ubuntu很简单.

  3. 我跟着这篇文章使用OpenBLAS编译Numpy,但找不到"numpy.core._dotblas"模块.更多的我无法同时使用ATLAS和OpenBLAS构建Numpy.

  4. 有人可以发布.py文件或bash代码来进行ATLAS和OpenBLAS之间的比较吗?例如.

  5. 我使用自己的ATLAS构建了Numpy-1.9,从源代码编译了OpenBLAS,并在OpenSUSE 13.1的存储库中安装了"libopenblaso"(OpenMP版本)和"libopenblasp"(pthreads版本).如何配置链接和库,以便在不重建Numpy-1.9软件包的情况下告诉Numpy-1.9使用OpenBLAS而不是ATLAS.

注意:如果在存储库中安装"libatlas",则ATLAS不会针对您的计算机进行调整,并且计算性能不会太高.因此,我首先构建并调整了ATLAS,然后使用我自己的ATLAS构建了Numpy.之后,我尝试将OpenBLAS链接到Numpy,但失败了.

提前谢谢了!


谢谢@Dmitry的快速回复!但问题没有解决......

安装

$ sudo zypper in libopenblasp0

The following NEW package is going to be installed:
  libopenblasp0 

1 new package to install.
Overall download size: 3.0 MiB. After the operation, additional 30.3 MiB will be used.
Continue? [y/n/? shows all options] (y): 
Retrieving package libopenblasp0-0.2.11-11.1.x86_64      (1/1),   3.0 MiB ( 30.3 MiB unpacked)
Retrieving: libopenblasp0-0.2.11-11.1.x86_64.rpm ...........................[done (2.1 MiB/s)]
(1/1) …
Run Code Online (Sandbox Code Playgroud)

python numpy opensuse atlas openblas

9
推荐指数
1
解决办法
6343
查看次数

二次形成numpy数组乘法的最快方法是什么?

我尝试过这两种选择

objective = lambda A, x : (np.dot(x.T ,np.dot(A, x)))[0,0]
objective = lambda A, x : (np.matrix(x).T * np.matrix(A) * np.matrix(x))[0,0]
Run Code Online (Sandbox Code Playgroud)

对于主要的我使用我的算法获得5秒的运行时间使用次要我得到14秒

用MATLAB我得了2秒

我想和Numpy一起去,但显然我需要一种方法来改善这种糟糕的结果.如何获得更快的二次型矩阵,矢量积?

注意:我描述了代码,这个lambda函数饮用了所有的汁液. 改进:我只是删除了scipy和numpy的原生Ubuntu包,然后安装了以下内容

sudo pip install numpy
sudo apt-get install libatlas-base-dev gfortran
sudo pip install scipy
sudo apt-get install libpng-dev libfreetype6-dev
sudo pip install matplotlib 
Run Code Online (Sandbox Code Playgroud)

我提高了性能,但仍低于Matlab

python arrays matlab numpy matrix-multiplication

8
推荐指数
1
解决办法
6666
查看次数

如何使用Python和OpenCV进行多处理?

我正在使用Python 3.4.3和OpenCV 3.0.0来处理(应用各种过滤器)内存中非常大的图像(80,000 x 60,000),我想使用多个CPU内核来提高性能.经过一些阅读,我得到了两种可能的方法:1)使用python的multiprocessing模块,让每个进程处理一大片大图像并在处理完成后加入结果(这可能应该在POSIX系统上执行?)2)由于NumPy支持OpenMP,而OpenCV使用NumPy,我可以将多处理留给NumPy吗?

所以我的问题是:

哪一个会是更好的解决方案?(如果它们看起来不合理,那么可能的方法是什么?)

如果选项2是好的,我应该用OpenMP构建NumPy和OpenCV吗?我如何实际进行多处理?(我真的找不到有用的指示..)

python parallel-processing opencv image-processing openmp

8
推荐指数
1
解决办法
1万
查看次数

如何在python / numpy中自动执行BLAS的环境变量相关基准测试?

我需要一些帮助来弄清楚如何在python中自动执行基准测试。

我正在测试通过python中的numpy调用BLAS库对线程的影响。在linux环境中,OpenBLAS中的线程是通过环境变量控制的OMP_NUM_THREADS。我想做一个测试,使我OMP_NUM_THREADS从1 递增到最大值,在每个线程计数时给例程计时,然后最后对所有线程计数操纵合计计时。

问题如下。可以在python中设置环境变量,但是它们仅影响子进程或子shell。因此,我可以使用以下驱动程序代码正确运行基准测试:

#!/usr/bin/env python                                                                                                     # driver script for thread test
import os

thread_set =[1,2,4,8,16]
for thread in thread_set:

    os.environ['OMP_NUM_THREADS']='{:d}'.format(thread)
    os.system("echo $OMP_NUM_THREADS")
    os.system("numpy_test")
Run Code Online (Sandbox Code Playgroud)

和numpy_test脚本:

#!/usr/bin/env python
#timing test for numpy dot product (using OpenBLAS)                                                      
#based on http://stackoverflow.com/questions/11443302/compiling-numpy-with-openblas-integration
import sys
import timeit

setup = "import numpy; x = numpy.random.random((1000,1000))"
count = 5

t = timeit.Timer("numpy.dot(x, x.T)", setup=setup)
dot_time = t.timeit(count)/count
print("dot: {:7.3g} sec".format(dot_time))
Run Code Online (Sandbox Code Playgroud)

但是分析这是一个非常手动的过程。

特别是,我无法dot_timenumpy_test外部包装例程返回值,因此无法以任何自动化方式分析测试结果。例如,我想绘制dot_time线程数与线程数的关系图,或评估dot_time/ numbers是否是常数。

如果我尝试通过定义python测试函数(避免使用上述os.system() …

python multithreading numpy blas python-3.3

5
推荐指数
1
解决办法
2820
查看次数

Numpy 点运算未使用所有 cpu 核心

  • 我正在对两个矩阵进行 numpy 点积(假设 a 和 b 是两个矩阵)。

  • 当 a 的形状为 (10000, 10000) 且 b 的形状为 (1, 10000) 时,numpy.dot(a, bT) 正在使用所有 CPU 核心。

  • 但是,当 a 的形状为 (10000, 10000) 且 b 的形状为 (2, 10000) 时,numpy.dot(a, bT) 不会使用所有 CPU 核心(仅使用一个)。

当 b 的行大小从 2 到 15(即从 (2, 10000) 到 (15, 10000))时,就会发生这种情况。

例子:

import numpy as np

a = np.random.rand(10**4, 10**4)

def dot(a, b_row_size):
    b = np.random.rand(b_row_size, 10**4)

    for i in range(10):
        # dot operation
        x = np.dot(a, b.T)

# Using all CPU cores …
Run Code Online (Sandbox Code Playgroud)

python numpy openblas python-3.5

5
推荐指数
1
解决办法
4695
查看次数

numpy.disutils.system_info.NotFoundError:未找到 lapack/blas 资源

问题:将 numpy 链接到更正的线性代数库。过程太复杂了,我可能会第 6 次寻找解决方案,但我不知道出了什么问题。我在 Ubuntu 12.04.5 上。我重新安装了 blas 和 lapack,然后使用 pip 重新安装了 numpy。我在系统环境中这样做,然后也在 virtualenv 环境中尝试。所有的事情似乎都没有奏效。

这是我的numpy.__config__.show()

lapack_info:
  NOT AVAILABLE
lapack_opt_info:
  NOT AVAILABLE
openblas_lapack_info:
  NOT AVAILABLE
blas_info:
  NOT AVAILABLE
atlas_3_10_blas_threads_info:
  NOT AVAILABLE
atlas_threads_info:
  NOT AVAILABLE
blas_src_info:
  NOT AVAILABLE
atlas_3_10_threads_info:
  NOT AVAILABLE
atlas_blas_info:
  NOT AVAILABLE
atlas_3_10_blas_info:
  NOT AVAILABLE
lapack_src_info:
  NOT AVAILABLE
atlas_blas_threads_info:
  NOT AVAILABLE
openblas_info:
  NOT AVAILABLE
blas_mkl_info:
  NOT AVAILABLE
blas_opt_info:
  NOT AVAILABLE
atlas_info:
  NOT AVAILABLE
atlas_3_10_info:
  NOT AVAILABLE
lapack_mkl_info:
  NOT AVAILABLE
mkl_info:
  NOT AVAILABLE
Run Code Online (Sandbox Code Playgroud)

这是一个非常常见的错误,根据用户的环境和历史有很多解决方案。我最近按照此处的说明完成了安装 BLAS 和 LAPACK …

python ubuntu numpy blas lapack

4
推荐指数
2
解决办法
9502
查看次数

Numpy multiarray.so:未定义的符号:cblas_sgemm

我正在尝试安装numpy==1.10.2,scipymatplotlib在服务器上基于opensuse.我已经从源头安装numpyvirtualenv(我也尝试过pip - 当然也是同样的结果).现在,当我尝试numpy在python控制台中导入时,我收到以下错误:

ImportError: /home/user/.virtualenvs/project/lib/python2.7/site-packages/numpy/core/multiarray.so: undefined symbol: cblas_sgemm
Run Code Online (Sandbox Code Playgroud)

注意:我不是这台服务器的超级用户.

编辑:

ldd /home/user/.virtualenvs/project/lib/python2.7/site-packages/numpy/core/multiarray.so`
linux-vdso.so.1 (0x00007fffa0d69000)
libtatlas.so.3 => /home/user/.local/usr/lib64/atlas/libtatlas.so.3 (0x00007fe366d66000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe366a50000)
libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007fe3666b2000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe366496000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe3660f0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe367a15000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe365eec000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007fe365ce9000)
Run Code Online (Sandbox Code Playgroud)

libtatlas.so.3 => /home/user/.local/usr/lib64/atlas/libtatlas.so.3 - 我因为libatlas的其他问题而将此链接起来: ImportError: /usr/lib64/atlas/libtatlas.so.3: undefined symbol: clapack_ilaenv

SOLLUTION

问题出在ATLAS lib上.根据@ali_m建议我numpy从源代码安装OpenBLAS而不是ATLAS.这里链接到如何使用BLAS安装numpy的说明.

python numpy opensuse blas atlas

4
推荐指数
1
解决办法
6279
查看次数