У меня есть фрагмент кода для форматирования 2D-массива в определенном строчном формате. Фрагмент кода хорошо работает с последними версиями NumPy (например, 1.9.2), но то же самое происходит с NumPy 1.4.1, который является текущей версией для CentOS 6.6.Форматирование 2D-массива со старой версией NumPy
import numpy as np
cfmt = '%14.6E'
vfmt = np.vectorize(cfmt.__mod__)
Traceback (most recent call last):
File "/usr/lib64/python2.6/site-packages/numpy/lib/function_base.py", line 1762, in __init__
nin, ndefault = _get_nargs(pyfunc)
File "/usr/lib64/python2.6/site-packages/numpy/lib/function_base.py", line 1694, in _get_nargs
raise ValueError, 'failed to determine the number of arguments for %s' % (obj)
ValueError: failed to determine the number of arguments for <method-wrapper '__mod__' of str object at 0xb461e0>
От Numpy-discussion, это, кажется, проблема с functools.partial
с рекомендовать обходной путь для использования lambda
. Тем не менее, вот мои неудачные попытки:
vfmt1 = np.vectorize(lambda x: cfmt.__mod__(x))
vfmt2 = np.vectorize(lambda x: cfmt % (x,), ['|S14']) # attempt to specify otype
# A 2D array with shape (1, 3)
ar = np.array([[1.0e35, 9.999999, 10.0]])
print(vfmt1(ar)) # [[' 1.0000' ' 9.9999' ' 1.0000']]
print(vfmt2(ar)) # [[' 1.0000' ' 9.9999' ' 1.0000']]
Эти значения кажутся строки обрезаны до 8 символов, и, по существу, мусор.
Ожидаемый результат отформатирован с использованием последней версии NumPy является:
array([[' 1.000000E+35', ' 9.999999E+00', ' 1.000000E+01']], type='|S14')
Любые предложения о том, как получить ожидаемые результаты, используя старые версии NumPy? Или вообще как векторизовать форматирование числовых массивов в массивы символов?
FYI: Вы работаете на ошибку, которая была исправлена в новых версиях NumPy: https://github.com/numpy/numpy/issues/2485 –
Спасибо, однако мне нужно решение для более старой версии NumPy, так как это поддерживаемая версия доступна мне. –
Есть ли 'vfmt = np.vectorize ('{: 14.6E}'. Format)' work? – askewchan