小编Mar*_*tyn的帖子

Jensen-Shannon分歧

我有另一个问题,我希望有人可以帮助我.

我正在使用Jensen-Shannon-Divergence来测量两个概率分布之间的相似性.相似性得分似乎是正确的,因为它们在1和0之间,假设一个使用基数2对数,0表示分布相等.

但是,我不确定某个地方是否确实存在错误,并且想知道某人是否可以说"是的,这是正确的"或"不,你做错了什么".

这是代码:

from numpy import zeros, array
from math import sqrt, log


class JSD(object):
    def __init__(self):
        self.log2 = log(2)


    def KL_divergence(self, p, q):
        """ Compute KL divergence of two vectors, K(p || q)."""
        return sum(p[x] * log((p[x]) / (q[x])) for x in range(len(p)) if p[x] != 0.0 or p[x] != 0)

    def Jensen_Shannon_divergence(self, p, q):
        """ Returns the Jensen-Shannon divergence. """
        self.JSD = 0.0
        weight = 0.5
        average = zeros(len(p)) #Average
        for x in range(len(p)):
            average[x] = weight …
Run Code Online (Sandbox Code Playgroud)

python metrics distance

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

Python内存序列化

我想知道是否有人可能知道以下答案.

我正在使用Python来构建基于字符的后缀树.树中有超过1100万个节点,可以容纳大约3GB的内存.这通过使用slot类方法而不是Dict方法从7GB下降.

当我序列化树(使用最高协议)时,生成的文件要小一百多倍.

当我重新加载pickle文件时,它再次消耗3GB的内存.这个额外开销来自何处,是否与Pythons处理对类实例的内存引用有关?

更新

感谢larsmans和Gurgeh提供的非常有用的解释和建议.我正在使用树作为文本语料库中信息检索界面的一部分.

我最初将子项(最多30个)存储为Numpy数组,然后尝试硬件版本(ctypes.py_object*30),Python数组(ArrayType),以及字典和集类型.

列表似乎做得更好(使用孔雀鱼来描述内存,并且__slots__['variable',...]),但是如果可以的话,我仍然试图将它压缩一点.我对数组唯一的问题是必须事先指定它们的大小,这导致只有一个子节点的节点有点冗余,而且我有很多它们.;-)

在构造树之后,我打算将它转换为具有第二遍的概率树,但是可以在构造树时执行此操作.由于构造时间在我的情况下并不太重要,所以array.array()听起来像是有用的东西,感谢提示,真的很感激.

我会告诉你它是怎么回事.

python serialization memory-management class pickle

10
推荐指数
1
解决办法
361
查看次数

xmlrpclib:字典键必须是字符串类型错误

我想要一些建议.我在Python 2.6中遇到以下错误:

Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    s.Search(query)
  File "/usr/lib/python2.6/xmlrpclib.py", line 1199, in __call__
  return self.__send(self.__name, args)
  File "/usr/lib/python2.6/xmlrpclib.py", line 1489, in __request
  verbose=self.__verbose
  File "/usr/lib/python2.6/xmlrpclib.py", line 1253, in request
  return self._parse_response(h.getfile(), sock)
  File "/usr/lib/python2.6/xmlrpclib.py", line 1392, in _parse_response
  return u.close()
  File "/usr/lib/python2.6/xmlrpclib.py", line 838, in close
  raise Fault(**self._stack[0])
  Fault: <Fault 1: "<type 'exceptions.TypeError'>:dictionary key must be string">
Run Code Online (Sandbox Code Playgroud)

我的代码是使用Django提供迷你搜索引擎的一部分.在Python 3中,一切都像梦一样,但Django不适用于Python 3,所以我需要回溯我的代码,这是问题的来源.

我的代码(client.py):

# -*- coding: utf-8 -*-
from __future__ import unicode_literals # This was …
Run Code Online (Sandbox Code Playgroud)

python unicode dictionary xmlrpclib

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

最大的特征向量和可能的Scipy古怪

不确定这是否是包中的错误或由于其他原因,但我们继续.

我正在使用以下包在相似度得分的对称矩阵(大小为10x10)上找到最大的特征值及其对应的特征向量:

scipy.sparse.linalg.eigen.arpack.eigsh
Run Code Online (Sandbox Code Playgroud)

,像这样:

scipy.sparse.linalg.eigen.arpack.eigsh(mymatrix, 1, which='LM')
Run Code Online (Sandbox Code Playgroud)

现在的问题是,当我运行它几次(使用相同的矩阵,设置等)时,有时特征向量中的值是正的,有时是负的(参见运行3).

有谁知道为什么会这样,或者它是一个错误?似乎没有一种模式,但它只发生在每次迭代后运行代码而不关闭Python时(即每次运行后点击F5).

### Run 1: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

### Run 2: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732]
[-0.31885208]
[-0.31808024]
[-0.298174  ]]

### Run 3:###
[[ 0.31056873]
[ 0.31913092]
[ 0.3149287 ]
[ 0.32262921]
[ 0.32190688]
[ 0.31292658]
[ 0.32424732]
[ 0.31885208]
[ 0.31808024]
[ 0.298174  ]]

### Run 4: ###
[[-0.31056873]
[-0.31913092]
[-0.3149287 ]
[-0.32262921]
[-0.32190688]
[-0.31292658]
[-0.32424732] …
Run Code Online (Sandbox Code Playgroud)

python scipy eigenvalue eigenvector

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