小编jcr*_*udy的帖子

使用LAPACK分发基于Cython的扩展

我正在编写一个包含Cython扩展和使用LAPACK(和BLAS)的Python模块.我打开使用两种clapacklapacke,或某种f2cf2py解决方案,如果必要的.最重要的是,我能够调用lapackblas从用Cython在紧密循环不Python的调用开销例程.

我在这里找到了一个例子.但是,该示例取决于SAGE.我希望我的模块可以在不安装SAGE的情况下进行安装,因为我的用户不太可能想要或不需要SAGE.我的用户很可能安装了numpy,scipy,pandas和scikit的软件包,所以这些都是合理的依赖.使用的接口的最佳组合是什么,以及最小的setup.py文件看起来可以获取必要的信息(来自numpy,scipy等)以进行编译?

编辑: 这是我最终做的.它适用于我的macbook,但我不知道它是多么便携.当然有更好的方法.

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy
from Cython.Build import cythonize
from numpy.distutils.system_info import get_info

# TODO: This cannot be the right way
blas_include = get_info('blas_opt')['extra_compile_args'][1][2:]
includes = [blas_include,numpy.get_include()]

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = cythonize([Extension("cylapack", ["cylapack.pyx"],
                                       include_dirs = includes,
                                       libraries=['blas','lapack'])
                   ])
)
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为在我的macbook上,clapack.h头文件与...相同cblas.h.然后我可以在我的pyx文件中执行此操作:

ctypedef np.int32_t …
Run Code Online (Sandbox Code Playgroud)

python numpy cython blas lapack

67
推荐指数
1
解决办法
1996
查看次数

如何使用cython创建自定义numpy dtype

有创建用C定制numpy的dtypes例子在这里:

另外,似乎可以在cython中创建自定义ufunc:

似乎也应该可以使用cython创建一个dtype(然后为它创建自定义ufunc).可能吗?如果是这样,你能发一个例子吗?

使用案例:

我想做一些生存分析.基本数据元素是具有相关审查值的生存时间(浮点数)(如果关联时间表示失败时间则为假,如果它代表审查时间则为True(即,在观察期间未发生故障)).

显然,我可以使用两个numpy数组来存储这些值:时间的float数组和censor值的bool数组.但是,我想说明事件发生多次的可能性(这是一个很好的模型,比如心脏病发作 - 你可以拥有多个).在这种情况下,我需要一个对象数组,我称之为MultiEvents.每个都MultiEvent包含一系列浮点数(未经审查的失败时间)和一个观察期(也是一个浮点数).请注意,所有MultiEvents 的故障数量并不相同.

我需要能够在一个MultiEvents 数组上执行一些操作:

  1. 获取每个故障的数量

  2. 获得删失时间(即观察时间减去所有失败时间的总和)

  3. 根据其他参数数组(例如危险值数组)计算对数似然.例如,单个MultiEvent M和持续危险值的对数似然h可能是这样的:

    sum(log(h) + h*t for t in M.times) - h*(M.period - sum(M.times))

M.times失败时间的列表(数组,等等)在哪里,M.period是总观察期.我希望适用适当的numpy广播规则,以便我能做到:

log_lik = logp(M_vec,h_vec)
Run Code Online (Sandbox Code Playgroud)

只要尺寸M_vech_vec兼容性,它就能工作.

我当前的实现使用numpy.vectorize.这工作得很好1和2,但实在是太慢了3.另请注意,我不能做这个,因为失败的我多数据对象数量不提前知道.

python numpy cython

24
推荐指数
1
解决办法
1934
查看次数

Pandas DataFrames中的平等 - 列顺序很重要?

作为单元测试的一部分,我需要测试两个DataFrames是否相等.DataFrame中列的顺序对我来说并不重要.然而,对熊猫来说似乎很重要:

import pandas
df1 = pandas.DataFrame(index = [1,2,3,4])
df2 = pandas.DataFrame(index = [1,2,3,4])
df1['A'] = [1,2,3,4]
df1['B'] = [2,3,4,5]
df2['B'] = [2,3,4,5]
df2['A'] = [1,2,3,4]
df1 == df2
Run Code Online (Sandbox Code Playgroud)

结果是:

Exception: Can only compare identically-labeled DataFrame objects
Run Code Online (Sandbox Code Playgroud)

我相信表达式df1 == df2应该评估为包含所有True值的DataFrame .显然,==在这种情况下,正确的功能应该是有争议的.我的问题是:是否有一个Pandas方法可以满足我的需求?也就是说,有没有办法进行忽略列顺序的相等比较?

python pandas

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

无形API的许多重要特性(在Scala中),它们做了什么?

我正在努力学习无形(2.0.0).这似乎是一个了不起的工具,我对此感到非常兴奋,但我在前进中遇到了问题.因为还没有太多的文档,我一直在研究示例和源代码.我遇到了困难,因为大多数例子使用多个无形概念,在源代码中,一个无形类型通常会使用其他类型,所以我最终走下了无形的兔子洞,可以这么说.我认为列出无形API的重要特征以及每个API的功能的简单描述会很有帮助.由于我显然没有资格制作这样的清单,我问你,Stack Overflow的人类!

对于每项功能,请尽可能多地包含以下内容:

  1. 功能的名称以及如何导入它.

  2. 简单描述它的作用.

  3. 为什么这个功能很重要/为什么有人会费心去使用它?

  4. 一个使用尽可能少的其他无形或高级Scala概念的简单示例.

通过API的一个特征,我指的是一个单独的东西(例如,类型,函数,对象等),或者一组紧密耦合的这样的东西,由无形2.0定义,可以导入和使用一个程序.我不是指一般概念,如高阶多态或类型级递归.请每个答案只包含一个功能.也许如果有足够的答案并且其他人也使用此列表,我们可以使用答案上的投票来排列不同功能的重要性.

注意:我知道此功能列表.我认为它很棒,它对我帮助很大.但是,我正在寻找与API文档更相似的内容,而不是您可以执行的操作列表.我可以理解许多例子,并从中推断出某些特征的目的,但我经常会被某些特定部分绊倒而无法弄清楚它的功能.

scala shapeless

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

无形(scala)中的"at"是什么?

我已经看到一个名为"at"的对象(可能是一个函数)散布在整个无形源和使用无形的代码中.特别是,它用于解答另一个问题.这是代码片段:

object iterateOverHList extends Poly1 {
  implicit def iterable[T, L[T] <: Iterable[T]] = at[L[T]](_.iterator)
}
Run Code Online (Sandbox Code Playgroud)

我有一些线索,它与〜>类型的apply方法有关."at"具体做什么,它在哪里定义?

scala shapeless

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

使用带循环的Scala延续

我意识到这与通常的SO问题相反,但是即使我认为它不起作用,下面的代码也能正常工作.下面是一个小型Scala程序,它使用while循环的continuation.根据我对连续传递样式的理解,这段代码应该通过在while循环的每次迭代中向堆栈添加一个帧来产生堆栈溢出错误.但是,它工作得很好.

import util.continuations.{shift, reset}


class InfiniteCounter extends Iterator[Int] {
    var count = 0
    var callback: Unit=>Unit = null
    reset {
        while (true) {
            shift {f: (Unit=>Unit) =>
                callback = f
            }
            count += 1
        }

    }

    def hasNext: Boolean = true

    def next(): Int = {
        callback()
        count
    }
}

object Experiment3 {

    def main(args: Array[String]) {
        val counter = new InfiniteCounter()
        println(counter.next())
        println("Hello")
        println(counter.next())
        for (i <- 0 until 100000000) {
            counter.next()
        }
        println(counter.next())
    }

}
Run Code Online (Sandbox Code Playgroud)

输出是:

1
Hello …
Run Code Online (Sandbox Code Playgroud)

continuations scala delimited-continuations

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

xsd架构是否有xsd架构?

我经常在工作中使用xsd模式文件,我想知道:是否可以为xsd模式语言编写xsd模式文件?这似乎是一种记录模式语言的明显方式,我认为这将是开发人员尝试的第一件事.但是,我一直无法找到具有明显搜索条件的文件.如果不可能,为什么不呢?如果有可能,有没有人做过,有一个地方我可以下载这样的文件?

笔记:

  1. 维基百科建议xsd模式语言"不是100%自我描述",因为"内容和属性声明不能依赖于属性或元素上下文".如果是这样,你能提供一个xsd特征的例子,它需要这样的上下文,因此无法表示吗?

  2. 这个问题不仅仅是学术性的.我可能需要在不久的将来编写一个处理xsd模式文件的程序,并且从xsd(使用诸如generateDS之类的工具)生成源代码将是一个容易的起点.

xml xsd

6
推荐指数
2
解决办法
2296
查看次数

无形映射中的子类型多态性

我构建了以下内容:

import shapeless._
import poly._

object Main {
    def main(args: Array[String]) = {

        object iterateOverHList extends (List ~> Iterator) {
            def apply[T](it: List[T]) = it.iterator
        }

        val x = List(1,2,3) :: List("cat","dog") :: HNil

        val xIt = x map iterateOverHList

    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码很棒,非常棒.但是,我还想要更多.我想,而不是指定我的HList将包含列表,允许任何Iterable.像这样:

import shapeless._
import poly._

object Main {
    def main(args: Array[String]) = {

        object iterateOverHList extends (Iterable ~> Iterator) {
            def apply[T](it: Iterable[T]) = it.iterator
        }

        val x = List(1,2,3) :: List("cat","dog") :: HNil

        val xIt = x …
Run Code Online (Sandbox Code Playgroud)

scala shapeless

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

Julia 中的数组类型提升

在 Julia 中,我可以promote用来使各种类型的对象兼容。例如:

>promote(1, 1.0)
(1.0,1.0)
>typeof(promote(1, 1.0))
(Float64, Float64)
Run Code Online (Sandbox Code Playgroud)

但是,如果我promote在数组上使用,它不会给我我想要的:

>promote([1], [1.0])
([1],[1.0])
>typeof(promote([1], [1.0]))
(Array{Int64,1},Array{Float64,1})
Run Code Online (Sandbox Code Playgroud)

我想要的是将Int64数组转换为Float64数组,所以我得到如下内容:

>promote_array([1], [1.0])
([1.0],[1.0])
>typeof(promote_array([1], [1.0]))
(Array{Float64,1},Array{Float64,1})
Run Code Online (Sandbox Code Playgroud)

promote_array是我编造的一个假设函数。我正在寻找一个真正的功能来做同样的事情。Julia 中是否有一个函数可以promote_array执行上述操作?

julia type-promotion

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

通过sqlalchemy使用mssql + pyodbc从Linux连接到MS SQL Server时出错

我有一个在Linux机器上运行的Python应用程序,该应用程序连接到在虚拟机内部的Windows Server中运行的MS SQL Server数据库。我有我的理由。我的应用程序进行一些大型查询并处理大量数据。它通常可以正常工作,但是每隔很多次程序就会崩溃,并显示以下内容:

python:read.c:207:tds_get_string:断言`dest_size> =(size_t)string_len'失败。

我不确定从哪里开始。没有Python堆栈跟踪。而是,该程序仅打印以上内容并终止。如果这是正常的例外情况,我可以抓住它并加以处理。

我的sqlalchemy连接字符串是:

mssql + pyodbc://用户名:密码@本地主机:1433 /数据库?驱动程序= FreeTDS

如果重要,则tsql -C给出以下输出:

编译时设置(通过“配置”脚本建立)

                        Version: freetds v0.91
         freetds.conf directory: /etc/freetds
 MS db-lib source compatibility: no
    Sybase binary compatibility: yes
                  Thread safety: yes
                  iconv library: yes
                    TDS version: 4.2
                          iODBC: no
                       unixodbc: yes
          SSPI "trusted" logins: no
                       Kerberos: yes
Run Code Online (Sandbox Code Playgroud)

我的猜测是我的问题是freetds中的错误的结果。我在Linux Mint机器上通过apt-get安装了freetds和unixodbc。我通过pip安装了pyodbc,并且正在使用anaconda。我一直在尝试从源代码安装各种不同版本的freetds,unixodbc和pyodbc。到目前为止,我还没有找到一种可行的组合。但是,我真的不知道我在做什么。我正在寻找解释,想法或解决方法。或者,当然是简单而完整的解决方案。

python sql-server freetds

3
推荐指数
1
解决办法
2640
查看次数