Выходной формат ndarray array2string - PullRequest
0 голосов
/ 22 декабря 2018

Я знаю, что это простой вопрос, но я могу найти только часть ответа по SO и не могу понять, как это сделать из документации Python или Numpy.Я уверен, что это задокументировано, я просто не понимаю.

Мне нужно печатать / писать в фиксированном формате (6 полей по 13,7e).Массив, который мне нужно напечатать, может иметь 4, 8, 12 или более значений.Я нашел np.array2string, что составляет почти , что мне нужно.

  • Есть ли способ устранить ведущие и конечные [ и ]?
  • Аналогично, есть ли способ избежать отступа во 2-й и последующих строках?

Решение не должно использовать array2string.Это была самая простая вещь, которую я нашел для управления форматированием печати / записи для ndarray.Я открыт для любого решения.:-)

Вот мой простой пример, демонстрирующий поведение, которое я хочу, и то, что я получаю:

>>> import numpy as np
>>> foo = np.arange(4.0)
>>> # this shows desired output with 4 values
>>> print( ('%13.7e'*4) % (foo[0], foo[1], foo[2], foo[3]) )
0.0000000e+001.0000000e+002.0000000e+003.0000000e+00
>>> print ( np.array2string(foo, separator='', formatter={'float_kind':'{:13.7e}'.format}) )
[0.0000000e+001.0000000e+002.0000000e+003.0000000e+00]
>>> foo = np.arange(12.0)
>>> print ( np.array2string(foo, separator='', max_line_width=80, formatter={'float_kind':'{:13.7e}'.format}) )
[0.0000000e+001.0000000e+002.0000000e+003.0000000e+004.0000000e+005.0000000e+00
 6.0000000e+007.0000000e+008.0000000e+009.0000000e+001.0000000e+011.1000000e+01]
>>> # this shows desired output with 12 values
>>> print( ('%13.7e'*6) % (foo[0], foo[1], foo[2], foo[3], foo[4], foo[5]) )
0.0000000e+001.0000000e+002.0000000e+003.0000000e+004.0000000e+005.0000000e+00
>>> print( ('%13.7e'*6) % (foo[6], foo[7], foo[8], foo[9], foo[10], foo[11]) )
6.0000000e+007.0000000e+008.0000000e+009.0000000e+001.0000000e+011.1000000e+01

1 Ответ

0 голосов
/ 22 декабря 2018

Вывод np.array2string это просто строка.Вы можете отформатировать его, используя обычные строковые методы.Например, вы можете снять скобки с выводом / хвостом и заменить пустые места, используя:

foo = np.arange(12.)
s = (np.array2string(foo, 
         separator='', 
         formatter={'float_kind':'{:13.7e}'.format}, 
         max_line_width=80).strip('[]').replace(' ', ''))
print(s)
# prints:
0.0000000e+001.0000000e+002.0000000e+003.0000000e+004.0000000e+005.0000000e+00
6.0000000e+007.0000000e+008.0000000e+009.0000000e+001.0000000e+011.1000000e+01
...