【问题标题】:Numba LLVM: Weird behaviour Error on decimal representationNumba LLVM:十进制表示的奇怪行为错误
【发布时间】:2015-07-03 10:47:05
【问题描述】:

我在一些 python 项目中使用 numba (numba-0.20.0-n)。某个例程编译失败

python: APFloat.cpp:273: 
void interpretDecimal(
llvm::StringRef::iterator, llvm::StringRef::iterator, decimalInfo*): 
Zusicherung »(*p == 'e' || *p == 'E') && "Invalid character in significand"« 
nicht erfüllt.
Abgebrochen (Speicherabzug geschrieben)

对不起,德语输出,但如果我将系统语言(Ubuntu 14.04 64bit)设置为英语

export LC_ALL=C

错误消失了。我怀疑十进制表示会导致一些奇怪的行为,因为在德国是逗号“,”而不是点“。”用于分隔数字。当然,在我的代码中,我只使用点作为分隔符,并且我认为所有编程语言都是如此。有什么想法吗?

编辑: 也许实际的代码可以帮助你们中的一些人。请注意,仅当系统语言为德语(或至少不是英语)时才会发生错误:

from numba import jit
import numpy as np

@jit( nopython = True )
def numba_shift(array, shift):
    '''
    if shift > 0 -> left shift
    if shift < 0 -> right shift
    '''
    if shift > 0:
        for k in xrange(array.shape[0]):
            #~ print k + shift, array.shape[0]
            if k + shift >= array.shape[0] or k + shift < 0:
                array[k] = 0
            else:
                array[k] = array[k+shift]
    else:
        for k in range(array.shape[0]-1,-1,-1):
            #~ print k + shift, array.shape[0]
            if k + shift >= array.shape[0] or k + shift < 0:
                array[k] = 0
            else:
                array[k] = array[k+shift]

    return array            

@jit(nopython = True )
def numba_shift_image(image, shift, rows, cols ):
    for row in xrange(rows):
        shift = (row - rows / 2) * shift
        new_row = np.zeros(cols)
        for k in xrange(cols):
            new_row[k] = image[row, k]
        new_row = numba_shift(new_row, shift)
        for k in xrange(cols):
            image[row, k] = new_row[k]

    return image 

    a = np.random.random((100,100))
    b = numba_shift_image(a, 2, 100, 100)

【问题讨论】:

  • 我遇到了同样的问题,但就我而言,语言是葡萄牙语。使用export LC_ALL=C 也适用于我。这以前没有发生过,所以可能是 Anaconda 上的 LLVM 更新引起的?
  • 好的,我用不同版本的 numba 和 LLVM 进行了一些测试,问题似乎出现在 llvmlite=0.5.0 上。使用numba=0.18.2llvmlite=0.4.0 效果很好。
  • 很高兴知道,这似乎是一个回归错误......

标签: python llvm numba


【解决方案1】:

这个错误似乎在 anaconda 中以下软件包的最后一次更新后得到修复:

llvmlite: 0.6.0-py27_0 --> 0.7.0-py27_3
numba: 0.20.0-np19py27_0 --> 0.21.0-np19py27_0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多