Numba LLVM:十进制表示的奇怪行为错误
Numba LLVM: Weird behaviour Error on decimal representation
我在一些 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)
这个错误似乎在 anaconda 中的以下软件包的最后更新后得到修复:
llvmlite: 0.6.0-py27_0 --> 0.7.0-py27_3
numba: 0.20.0-np19py27_0 --> 0.21.0-np19py27_0
我在一些 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)
这个错误似乎在 anaconda 中的以下软件包的最后更新后得到修复:
llvmlite: 0.6.0-py27_0 --> 0.7.0-py27_3
numba: 0.20.0-np19py27_0 --> 0.21.0-np19py27_0