小编Wol*_*tan的帖子

如何检查numpy/scipy中的blas/lapack链接?

我正在建立我的numpy/scipy环境基于blas和lapack或多或少基于这个步骤.

当我完成后,如何检查,我的numpy/scipy函数是否确实使用了之前构建的blas/lapack功能?

python numpy blas scipy lapack

125
推荐指数
5
解决办法
7万
查看次数

基准测试(python与使用BLAS的c ++)和(numpy)

我想编写一个广泛使用BLAS和LAPACK线性代数功能的程序.由于性能是一个问题,我做了一些基准测试,并想知道,如果我采取的方法是合法的.

可以说,我有三位参赛者,他们希望用简单的矩阵矩阵乘法来测试他们的表现.参赛者是:

  1. Numpy,仅使用其功能dot.
  2. Python,通过共享对象调用BLAS功能.
  3. C++,通过共享对象调用BLAS功能.

脚本

我为不同的维度实现了矩阵 - 矩阵乘法i.i为5的增量和matricies运行5-500 m1m2设置了这样的:

m1 = numpy.random.rand(i,i).astype(numpy.float32)
m2 = numpy.random.rand(i,i).astype(numpy.float32)
Run Code Online (Sandbox Code Playgroud)

Numpy

使用的代码如下所示:

tNumpy = timeit.Timer("numpy.dot(m1, m2)", "import numpy; from __main__ import m1, m2")
rNumpy.append((i, tNumpy.repeat(20, 1)))
Run Code Online (Sandbox Code Playgroud)

2. Python,通过共享对象调用BLAS

有了这个功能

_blaslib = ctypes.cdll.LoadLibrary("libblas.so")
def Mul(m1, m2, i, r):

    no_trans = c_char("n")
    n = c_int(i)
    one = c_float(1.0)
    zero = c_float(0.0)

    _blaslib.sgemm_(byref(no_trans), byref(no_trans), byref(n), byref(n), byref(n), 
            byref(one), m1.ctypes.data_as(ctypes.c_void_p), byref(n), 
            m2.ctypes.data_as(ctypes.c_void_p), byref(n), byref(zero), 
            r.ctypes.data_as(ctypes.c_void_p), byref(n))
Run Code Online (Sandbox Code Playgroud)

测试代码如下所示:

r = …
Run Code Online (Sandbox Code Playgroud)

c++ python benchmarking numpy blas

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

有没有办法在不调用__init__的情况下实例化一个类?

有没有办法绕过__init__python中的类的构造函数?

例:

class A(object):    
    def __init__(self):
        print "FAILURE"

    def Print(self):
        print "YEHAA"
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个实例A.它可能看起来像这样,但是这种语法不正确.

a = A
a.Print()
Run Code Online (Sandbox Code Playgroud)

编辑:

一个更复杂的例子:

假设我有一个对象C,其目的是存储一个参数并对其进行一些计算.但是,该参数不是这样传递的,而是嵌入在一个巨大的参数文件中.它可能看起来像这样:

class C(object):
    def __init__(self, ParameterFile):
        self._Parameter = self._ExtractParamterFile(ParameterFile)
    def _ExtractParamterFile(self, ParameterFile):
        #does some complex magic to extract the right parameter
        return the_extracted_parameter
Run Code Online (Sandbox Code Playgroud)

现在我想转储并加载该对象的实例C.但是,当我加载这个对象时,我只有单个变量self._Parameter,我无法调用构造函数,因为它期望参数文件.

    @staticmethod
    def Load(file):
        f = open(file, "rb")
        oldObject = pickle.load(f)
        f.close()

        #somehow create newObject without calling __init__
        newObject._Parameter = oldObject._Parameter
        return newObject
Run Code Online (Sandbox Code Playgroud)

换句话说,如果不传递参数文件,则无法创建实例.在我的"真实"的情况,但是,它不是一个参数文件,但一些大数据的垃圾我当然不希望在内存中随身携带,甚至将其存储到光盘上.

因为我想C从方法返回一个实例,Load …

python constructor class instantiation

57
推荐指数
5
解决办法
4万
查看次数

是否定义了此代码行为?

以下代码如何打印到控制台?

map<int,int> m;
m[0] = m.size();
printf("%d", m[0]);
Run Code Online (Sandbox Code Playgroud)

可能答案:

  1. 未定义代码的行为,因为未定义哪个语句m[0]m.size()正由编译器首先执行.因此,它可以打印1以及0.
  2. 它会打印,0因为首先执行赋值运算符的右侧.
  3. 它打印1是因为它operator[]具有完整语句的最高优先级m[0] = m.size().因此,会发生以下事件序列:

    • m[0] 在地图中创建一个新元素
    • m.size() 被调用现在是 1
    • m[0] 获得分配先前返回的(由m.size()) 1
  4. 真正的答案?,我不知道^^

c++ operators

39
推荐指数
1
解决办法
436
查看次数

是否有"增强的"numpy/scipy dot方法?

问题

我想使用numpy或scipy来计算以下内容:

Y = A**T * Q * A
Run Code Online (Sandbox Code Playgroud)

其中Am x n矩阵,A**T是的转置AQ是一个m x m对角矩阵.

由于Q是对角矩阵,因此我只将其对角线元素存储为矢量.

解决方法 Y

目前我可以想到两种计算方法Y:

  1. Y = np.dot(np.dot(A.T, np.diag(Q)), A)
  2. Y = np.dot(A.T * Q, A).

显然,选项2优于选项1,因为不必创建真正的矩阵diag(Q)(如果这是numpy真正做的......)
但是,这两种方法都存在必须分配比实际需要更多内存的缺陷,因为A.T * Qnp.dot(A.T, np.diag(Q))必须与之一起存储A以便计算Y.

是否有numpy的/ SciPy的方法,该方法将消除额外的内存不必要的分配,你将只通过两个矩阵AB(在我的情况BA.T)和权重向量Q与它一起?

python math numpy scipy

27
推荐指数
1
解决办法
3711
查看次数

如何从python访问matlab/octave模块?

我正在寻找一种从python访问matlab模块的方法.我目前的情况是这样的:

  • 我有一个python代码,通过调用Lapack例程进行数值计算,同时将内存分配为ctypes并作为指向Lapack例程的指针传递.
  • 我还有一个matlab模块,它与八度音程兼容,可以做一些我想要使用的数学技巧.

我现在的问题是:
什么是保持python中所有主要工作的有效方法,同时利用matlab/octave模块提供的可能性.如果我的ctype数组不必转换为其他对象以便运行八度音程,那么它也会很好.但是,我可以看到最后一点很难实现.

我目前的研究向我展示了两种可能的选择

  1. Pytave:不过看起来这个包装有点预备吗?!
  2. 走这条笨拙的道路:ctypes - >*.mat文件(通过numpy) - > octave - >*.mat文件 - > ctypes(通过numpy)

python matlab octave lapack

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

使用setuptools将numpy作为依赖项安装

这可能是一个跟进的问题一个.

我正在使用setuptools来安装我的包.作为依赖,我列出了numpy.我正在使用Python2.7,当我这样做

python setup.py install
Run Code Online (Sandbox Code Playgroud)

用这个setup.py文件:

from setuptools import setup

setup(name = "test_pack", install_requires = ["numpy"])
Run Code Online (Sandbox Code Playgroud)

我最终得到此错误消息:

ImportError: No module named numpy.distutils
Run Code Online (Sandbox Code Playgroud)

为了包含numpy作为依赖项并在未安装的情况下安装它,我需要做什么python-dev


完整输出python setup.py install:

running install
running bdist_egg
running egg_info
writing requirements to test_pack.egg-info/requires.txt
writing test_pack.egg-info/PKG-INFO
writing top-level names to test_pack.egg-info/top_level.txt
writing dependency_links to test_pack.egg-info/dependency_links.txt
reading manifest file 'test_pack.egg-info/SOURCES.txt'
writing manifest file 'test_pack.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/test_pack …
Run Code Online (Sandbox Code Playgroud)

python numpy setuptools python-2.7

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

什么进入主要功能?

我正在寻找使用c ++进入程序主要功能的最佳实践技巧.目前我认为有两种方法可行.(尽管这些方法的"边缘"可以任意地彼此接近)

1:编写一个"Master"类,接收传递给main函数的参数并处理"Master"类中的完整程序(当然你也使用其他类).因此,主要功能将减少到最小的线.

#include "MasterClass.h"
int main(int args, char* argv[])
{
MasterClass MC(args, argv);
}
Run Code Online (Sandbox Code Playgroud)

2:在主函数中编写"完整"程序,当然利用用户定义的对象!但是,还涉及全局功能,主要功能可能会有所增加.

我正在寻找一些关于如何用c ++编写程序主要功能的一般指导原则.我通过尝试为第一种方法编写一些单元测试来遇到这个问题,这有点困难,因为大多数方法都是私有的.

c++ program-entry-point coding-style

20
推荐指数
2
解决办法
4392
查看次数

如何在svn存储库中设置权限?

我在网络驱动器上创建了一个存储库svnadmin create repos.

有没有办法为存储库设置用户权限?

如果是这种情况,如何设置这些权限?

svn svnadmin user-permissions

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

如何强制numpy数组顺序为fortran风格?

我正在使用相当多的fortran库来进行一些数学计算.所以numpy中的所有数组都需要Fortran连续.
目前我用numpy.asfortranarray()完成了这个.

我的问题是:

  1. 这是一个告诉numpy的快速方法,数组应该以fortran风格存储还是更快?
  2. 是否有可能设置一些numpy标志,以便创建的每个数组都是fortran风格?

python arrays performance fortran numpy

14
推荐指数
2
解决办法
5784
查看次数