首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numpy Namespace问题

Numpy Namespace问题
EN

Stack Overflow用户
提问于 2014-04-20 18:17:49
回答 2查看 511关注 0票数 2

我目前有以下职能:

代码语言:javascript
复制
def add_bch(compressed):
    k = 16 #input blocks of 16 bits.

    prim_poly = Poly([1, 0, 1, 0, 0, 1]) # x^5+x^2+1
    prim_poly_3 = Poly([1, 0, 1, 1, 1, 1]) #prim_poly^3 -> x^5+x^4+x^3+x^2+1
    prim_poly_5 = Poly([1, 1, 1, 0, 1, 1]) #prim_poly^5 -> x^5+x^4+x^2+x+1

    gen_poly = npp.polymul(npp.polymul(prim_poly, prim_poly_3), prim_poly_5)[0]

    compressed = add_padding(compressed, k)

    compressed_with_ecc = []
    for i in range(len(compressed)/k):
        block = compressed[(k*i):(k*(i+1))]
        block_poly = bitstr_to_poly(block)
        quotient, remainder = npp.polydiv(block_poly, gen_poly)
        compressed_with_ecc.append(poly_to_bitstr(block. remainder))

    return Bits().join(compressed_with_ecc)

有关的进口报表如下:

代码语言:javascript
复制
from bitstring import BitArray, Bits
import numpy.polynomial.polynomial as npp
from numpy.polynomial import Polynomial as Poly

当我运行代码时,我得到了错误:

代码语言:javascript
复制
bash-4.2$ python send_mess < pg2600.txt
Traceback (most recent call last):
  File "send_mess", line 113, in <module>
    encoded = add_bch(compressed)
  File "send_mess", line 105, in add_bch
    quotient, remainder = npp.polydiv(block_poly, gen_poly)
  File "/usr/lib64/python2.7/site-packages/numpy/polynomial/polynomial.py", line 408, in polydiv
    return c1/c2[-1], c1[:1]*0
  File "<string>", line 373, in __rtruediv__
UnboundLocalError: local variable 'quo' referenced before assignment

我知道numpy导入会导致命名空间问题,但是尽管尝试,我还是找不出这里的问题所在。我想到的一件事是,这两个numpy导入语句可能会发生冲突,但在我看来,它们应该彼此分开,就像应该这样:

代码语言:javascript
复制
numpy
  ...
  polynomial
     ...
     Polynomial
     polynomial
        ...
        polymul
        polydiv
        ...
     ...
  ...

然而,我确实尝试过:

代码语言:javascript
复制
from bitstring import BitArray, Bits
import numpy.polynomial as npp

有了所有相关的名字更改,都没有用。我也尝试直接导入所有的东西,所以:

代码语言:javascript
复制
from bitstring import BitArray, Bits
from numpy.polynomial.polynomial import polymul, polydiv
from numpy.polynomial import Polynomial as Poly

这也不起作用。在函数中的任何一点(或者我的程序)中,我都没有提到一个变量,而且我看不出我的代码在哪里可以踩到numpy的脚趾。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-21 13:39:09

这是个小虫子。在__rtruediv__ at polybase.py#L421的实现中,可以看到如果len(self.coef)不是1,则语句

代码语言:javascript
复制
    return self.__class__(quo, self.domain, self.window)

执行,但未定义quo

下面是一个生成错误的简单示例:

代码语言:javascript
复制
In [1]: import numpy.polynomial.polynomial as npp

In [2]: p1 = npp.Polynomial([1,2])

In [3]: p2 = npp.Polynomial([3,4])

In [4]: npp.polydiv(p1, p2)
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-4-00c25f56fb20> in <module>()
----> 1 npp.polydiv(p1, p2)

    /Users/warren/anaconda/lib/python2.7/site-packages/numpy/polynomial/polynomial.pyc in polydiv(c1, c2)
    406     len2 = len(c2)
    407     if len2 == 1 :
--> 408         return c1/c2[-1], c1[:1]*0
    409     elif len1 < len2 :
    410         return c1[:1]*0, c1

/Users/warren/anaconda/lib/python2.7/site-packages/numpy/polynomial/polynomial.pyc in __rtruediv__(self, other)

UnboundLocalError: local variable 'quo' referenced before assignment

我在这里报道了这个问题:https://github.com/numpy/numpy/issues/4631

票数 4
EN

Stack Overflow用户

发布于 2014-04-22 02:46:02

这里有张便条。您不应该调用polydiv,而应该使用Pythondivmod操作符执行divmod(block_poly, gen_poly)。给出的代码的错误确实在__rtruediv__中,但这是一个意外。函数调用将除法处理为具有多项式系数的二次0多项式,并且由于polynomial.py文件顶部有from __future__ import division,所以尝试进行真正的除法。获得错误的一个更直接的方法是operator.truediv(block_poly, gen_poly)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23186008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档