小编ely*_*ely的帖子

可以在Haskell中使用类型类上的模式匹配实现多个调度吗?

这是关于Haskell中多个调度的问题.

下面我使用术语"符合[类类]"来表示"类型是[类类]的实例",因为类型类通常类似于接口,所以直观地想到一个具体的东西,比如实际的Int值由于其类型实现了属于该接口/类型类所需的任何内容,因此与接口/类型类"兼容".

考虑想使一个单一的幂函数,将工作无论是调用的例子Floating论证,Num,Integral或什么的,它的工作原理是使用由参数类型实现的类型等级来选择预先存在的幂函数打电话.

该函数(^)具有类型(^) :: (Integral b, Num a) => a -> b -> a,函数(**)具有类型(**) :: Floating a => a -> a -> a.

假设我想创建一个my_pow接受Num兼容的第一个参数和一个Num兼容的第二个参数的函数.

如果两个参数都Floating符合,那么它将调用(**); 如果第二个参数仅仅Integral符合,它将调用(^); 和任何其他情况将给出模式匹配错误.

我天真的第一次尝试是像类值构造函数一样处理类型类,并尝试在函数定义中进行模式匹配:

my_pow :: (Num a, Num b) => a -> b -> a
my_pow (Floating x) (Floating y) = x ** y …
Run Code Online (Sandbox Code Playgroud)

haskell pattern-matching typeclass

10
推荐指数
2
解决办法
1747
查看次数

Python:具有间隙的切片的语法较短?

假设我想从Python中的列表中获取第一个元素,第3个到第200个元素,以及通过步骤大小3的最后一个元素的第201个元素.

一种方法是使用不同的索引和连接:

new_list = old_list[0:1] + old_list[3:201] + old_list[201::3]
Run Code Online (Sandbox Code Playgroud)

有没有办法只用一个索引来做到这一点old_list?我想要类似下面的内容(我知道这在语法上不起作用,因为列表索引不能是列表,因为Python遗憾的是没有切片文字 ;我只是在寻找接近的东西):

new_list = old_list[[0, 3:201, 201::3]]
Run Code Online (Sandbox Code Playgroud)

我可以通过切换到NumPy数组来实现其中的一些功能,但我对如何为原生Python列表执行此操作更感兴趣.我也可以创建一个切片制作器或类似的东西,并可能强大的手臂给我一个等效的切片对象来表示我所有我想要的切片的组成.

但我正在寻找一些不涉及创建新类来管理切片的东西.我想简单地连接切片语法并将其提供给我的列表,让列表理解它意味着分别获取切片并最终连接各自的结果.

python slice

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

如何保存大数组以便在python中占用更少的内存?

我是python的新手.我有一个很大的阵列,a尺寸如此(43200, 4000),我需要保存它,因为我需要它以便将来处理.当我尝试用a保存它时np.savetxt,txt文件太大而我的程序遇到内存错误,因为我需要处理相同大小的5个文件.有没有办法保存大型数组,以便占用更少的内存?

谢谢.

python numpy

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

Conda说在Python 3.5.1中安装dateutil的冲突

我有一个由conda管理的Python 3.5.1环境.我正在尝试创建一个新的Python 3.5.1环境,conda create并在新环境中列出我想要的几个模块.

一个这样的模块是dateutil(不是 python-dateutil),它已经为现有的3.5.1环境安装,并且仅使用命令安装conda install dateutil- 当我在6个月前创建该环境时没有发出警告或冲突.我正在尝试复制此环境以提供可共享的内容以与协作者共享以进行分析 - 当我conda list在当前的3.5.1环境中使用时,我看到普通dateutil是安装的,而不是python-dateutil,所以这就是我需要的.

但是,现在当我尝试包含dateutil新环境时,它表示存在冲突,dateutil并且仅适用于Python 2.6.*,2.7.*,3.3.*,3.4.*.

这是一个例子:

user@computer:~/programming$ conda create -n test_dateutil python=3.5.1 dateutil
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata: ............
Solving package specifications: ....

The following specifications were found to be in conflict:
  - dateutil -> python 2.6*|2.7*|3.3*|3.4*
  - python 3.5.1*
Run Code Online (Sandbox Code Playgroud)

但是使用现有的Python 3.5.1环境,dateutil显然安装没有问题:

(py35)user@computer:~$ ipython
Python 3.5.1 |Continuum …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-dateutil conda

9
推荐指数
2
解决办法
3055
查看次数

如何从scikits.learn分类器中提取信息,然后在C代码中使用

我在Python中使用scikits.learn训练了一堆RBF SVM,然后挑选了结果.这些用于图像处理任务,我想要进行测试的一件事是在一些测试图像的每个像素上运行每个分类器.也就是说,从以像素(i,j)为中心的窗口中提取特征向量,在该特征向量上运行每个分类器,然后继续前进到下一个像素并重复.这对于Python来说太慢了.

澄清:当我说"这太慢了......"我的意思是即使是scikits.learn使用的Libsvm底层代码太慢了.我实际上正在为GPU编写手动决策函数,因此每个像素的分类是并行发生的.

我是否可以使用Pickle加载分类器,然后获取描述如何从特征向量计算决策的某种属性,然后将该信息传递给我自己的C代码?在线性SVM的情况下,我可以提取权重向量和偏置向量,并将它们作为输入添加到C函数中.但是对于RBF分类器来说,相同的事情是什么,以及如何从scikits.learn对象获取该信息?

补充:首先尝试解决方案.

看起来分类器对象具有support_vectors_包含支持向量作为数组的每一行的属性.还有一个属性dual_coef_是1乘以len(support_vectors_)系数的数组.从非线性SVM的标准教程中可以看出,应该执行以下操作:

  • 计算v待测数据点的特征向量.这将是一个与行的长度相同的向量support_vectors_.
  • 对于每一行isupport_vectors_,计算平方欧几里德距离d[i]该支持向量和之间v.
  • 计算t[i]gamma * exp{-d[i]}其中gamma是RBF参数.
  • 总结dual_coef_[i] * t[i]在所有i.intercept_将scikits.learn分类器的属性值添加到此总和.
  • 如果总和为正,则归类为1.否则,归类为0.

补充:在此文档链接的编号第9页上,它提到intercept_分类器的属性确实包含偏差项.我已更新上述步骤以反映这一点.

python svm libsvm scikits scikit-learn

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

Python:从该类中对多个处理类的数据成员的函数进行多处理的高效解决方法

我知道在处理作为类的数据成员的函数时(由于Pickling问题),多处理模块的局限性各种 讨论.

但是,在多处理中是否存在另一个模块或任何类型的解决方案,它允许特定的类似下面的内容(特别是不强制并行应用函数的定义以存在于类外)?

class MyClass():

    def __init__(self):
        self.my_args = [1,2,3,4]
        self.output  = {}

    def my_single_function(self, arg):
        return arg**2

    def my_parallelized_function(self):
        # Use map or map_async to map my_single_function onto the
        # list of self.my_args, and append the return values into
        # self.output, using each arg in my_args as the key.

        # The result should make self.output become
        # {1:1, 2:4, 3:9, 4:16}


foo = MyClass()
foo.my_parallelized_function()
print foo.output
Run Code Online (Sandbox Code Playgroud)

注意:我可以通过移动my_single_function到类之外并将类似的东西传递foo.my_argsmapmap_async …

python class multiprocessing

8
推荐指数
2
解决办法
3552
查看次数

Sphinx LaTeX标记限制

我想在Sphinx(版本1.1.2-1)中的多行数学模式中做三个非常基本的事情.

  1. 即使在数学模式下,也要将下划线写为变量名称的一部分;
  2. 使用\big,\biggl等等,分隔符,使大括号和括号;
  3. 并包括常规文本作为方程的一部分.

请注意以下两点.(1)我在Python代码中使用原始字符串作为Sphinx-markup文档,因此转义字符不需要额外的反斜杠,(2)我没有进行内联数学模式,它在Sphinx中以这样的方式分隔:

:math:`Some math stuff goes here` regular text could go here...
Run Code Online (Sandbox Code Playgroud)

相反,我正在做多行的事情,通常像eqnarray在LaTeX中一样:

.. math::
    DividendYield &=& \frac{DVT(t)}{CurrentMarketCap} \\
    Avg_Assets &=& \biggl( A/B \biggr) \textrm { when B is not zero...}
Run Code Online (Sandbox Code Playgroud)

目前,我得到Sphinx错误(生成的doc页面看起来像乱码),这些说法如下:

Unknown LaTeX command: textrm
Run Code Online (Sandbox Code Playgroud)

同样的事情发生了\biggl.对于下划线,它总是将其解释为我表示下标,但如果我使用\textunderscore或其他技巧,那么它会抛出与上面相同类型的错误.

数学模式下的下划线,textrm命令和大分隔符是我曾经使用的每个本机TeX包的极其基本的部分.那么为什么通过Sphinx无法进入?

更新

我正在处理的一个特定Python文件为我计算了Book Equity数据.所以下面,当你看到关于BookEquity的东西时,那就是参考.除了通过版本控制系统,我无法运行我们的构建文档进程,因此如果我只是修改现有文件,那么制作可重现的错误是最简单的.

但是,我所做的只是在我的代码中添加以下类函数,并使用简单的文档字符串.

def foo(self):
    r"""
    Sample docstring

    .. math::
        Ax &=& b \\
        Cx &=& \biggl(\frac{x/y}\biggr) \textrm{ if y is not zero.}
    """
    pass
Run Code Online (Sandbox Code Playgroud)

然后下面的图像是使用Sphinx …

python documentation latex python-sphinx

8
推荐指数
2
解决办法
6042
查看次数

查找3D阵列符合MULTIPLE条件的索引位置

我有一个由每个波段内的几个数字组成的3D阵列.是否有一个函数返回数组符合MULTIPLE条件的索引位置?

我尝试了以下方法:

index_pos = numpy.where(
    array[:,:,0]==10 and array[:,:,1]==15 and array[:,:,2]==30)
Run Code Online (Sandbox Code Playgroud)

它返回错误:

ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

8
推荐指数
3
解决办法
4962
查看次数

为什么`__subclasshook__`可以被monkeypatched到元类上,但`__instancecheck__`不能?

这是一个尝试创建装饰器的玩具示例,该装饰器允许声明属性名称,这些属性名称应该是标准__subclasshook____instancecheck__模式中"接口检查"的必要部分.

当我装饰这个Foo类时,它似乎按预期工作.我创建了一个Bar与之无关的类,Foo但它具有所需的属性,并且它正确地满足isinstance(instance_of_bar, Foo) == True.

但是作为另一个例子,我创建了一个dict扩充的子类,以便key可以使用getattr语法访问这些值(例如dict,d['a']可以替换d.a为可获得相同结果的where ).在这种情况下,属性只是实例属性,因此__instancecheck__应该工作.

这是代码.请注意,鉴于具有Bar工作实例的示例,将__subclasshook__函数"monkeypatch"选择到Foo类(具有元类)中的选择正常.因此,似乎不必直接在元类的类定义中定义函数.

#Using Python 2.7.3

import abc
def interface(*attributes):
    def decorator(Base):

        def checker(Other):
            return all(hasattr(Other, a) for a in attributes)

        def __subclasshook__(cls, Other):
            if checker(Other):
                return True
            return NotImplemented

        def __instancecheck__(cls, Other):
            return checker(Other)

        Base.__subclasshook__ = classmethod(__subclasshook__)
        Base.__instancecheck__ = classmethod(__instancecheck__) …
Run Code Online (Sandbox Code Playgroud)

python interface subclass abc

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

LSTM 如何处理变长序列

我在用 Python进行深度深度学习的第 7 章第 1 节中找到了一段代码,如下所示?

from keras.models import Model
from keras import layers
from keras import Input

text_vocabulary_size = 10000
question_vocabulary_size = 10000
answer_vocabulary_size = 500

# Our text input is a variable-length sequence of integers.
# Note that we can optionally name our inputs!
text_input = Input(shape=(None,), dtype='int32', name='text')

# Which we embed into a sequence of vectors of size 64
embedded_text = layers.Embedding(64, text_vocabulary_size)(text_input)

# Which we encoded in a single vector via …
Run Code Online (Sandbox Code Playgroud)

python machine-learning deep-learning lstm keras

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