У меня есть вложенный список Python, который выглядит следующим образом:
my_list = [[3.74, 5162, 13683628846.64, 12783387559.86, 1.81],
[9.55, 116, 189688622.37, 260332262.0, 1.97],
[2.2, 768, 6004865.13, 5759960.98, 1.21],
[3.74, 4062, 3263822121.39, 3066869087.9, 1.93],
[1.91, 474, 44555062.72, 44555062.72, 0.41],
[5.8, 5006, 8254968918.1, 7446788272.74, 3.25],
[4.5, 7887, 30078971595.46, 27814989471.31, 2.18],
[7.03, 116, 66252511.46, 81109291.0, 1.56],
[6.52, 116, 47674230.76, 57686991.0, 1.43],
[1.85, 623, 3002631.96, 2899484.08, 0.64],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32]]
Затем я импортирую Numpy и устанавливаю параметры печати на (suppress=True)
. Когда я создаю массив:
my_array = numpy.array(my_list)
Я не могу за свою жизнь подавить научную нотацию:
[[ 3.74000000e+00 5.16200000e+03 1.36836288e+10 1.27833876e+10
1.81000000e+00]
[ 9.55000000e+00 1.16000000e+02 1.89688622e+08 2.60332262e+08
1.97000000e+00]
[ 2.20000000e+00 7.68000000e+02 6.00486513e+06 5.75996098e+06
1.21000000e+00]
[ 3.74000000e+00 4.06200000e+03 3.26382212e+09 3.06686909e+09
1.93000000e+00]
[ 1.91000000e+00 4.74000000e+02 4.45550627e+07 4.45550627e+07
4.10000000e-01]
[ 5.80000000e+00 5.00600000e+03 8.25496892e+09 7.44678827e+09
3.25000000e+00]
[ 4.50000000e+00 7.88700000e+03 3.00789716e+10 2.78149895e+10
2.18000000e+00]
[ 7.03000000e+00 1.16000000e+02 6.62525115e+07 8.11092910e+07
1.56000000e+00]
[ 6.52000000e+00 1.16000000e+02 4.76742308e+07 5.76869910e+07
1.43000000e+00]
[ 1.85000000e+00 6.23000000e+02 3.00263196e+06 2.89948408e+06
6.40000000e-01]
[ 1.37600000e+01 1.22700000e+03 1.73787414e+09 1.44651157e+09
4.32000000e+00]
[ 1.37600000e+01 1.22700000e+03 1.73787414e+09 1.44651157e+09
4.32000000e+00]]
Если я создам простой массив NumPy напрямую:
new_array = numpy.array([1.5, 4.65, 7.845])
У меня нет проблем, и он печатает следующим образом:
[ 1.5 4.65 7.845]
Кто-нибудь знает в чем моя проблема?
numpy.set_printoptions
контролирует, как печатаются массивы. Однако нет возможности полностью исключить научное нотариальное заверение. Это переключение, потому что у вас есть значения в диапазоне от 1e-2 до 1e9. Если у вас меньший диапазон, он не будет использовать научную запись для их отображения. Почему это так важно, как они отображаются сprint
? Если вы пытаетесь сохранить его, использоватьsavetxt
и т. Д.Ответы:
Я думаю, что вам нужно
np.set_printoptions(suppress=True)
, подробности смотрите здесь: http://pythonquirks.blogspot.fr/2009/10/controlling-printing-in-numpy.htmlСм. Документацию SciPy.org, которая включает в себя все параметры функции (подавление не описано в приведенной выше ссылке), см. Здесь: https://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html.
источник
np.set_printoptions(formatter={'all':lambda x: str(x)})
Python Force подавляет все экспоненциальные обозначения при печати пустых ndarrays, выравнивания текста, округления и параметров печати:
Далее следует объяснение того, что происходит, прокрутите вниз, чтобы увидеть примеры кода.
Передача параметра
suppress=True
в функциюset_printoptions
работает только для чисел, которые помещаются в выделенное ему 8-символьное пространство по умолчанию, например:Однако, если вы передадите число шириной более 8 символов, экспоненциальная запись будет введена снова, например так:
У numpy есть выбор между делением вашего числа пополам, искажающим его, или форсированием экспоненциальной записи, он выбирает последнее.
Здесь
set_printoptions(formatter=...)
на помощь приходит указание параметров печати и округления. Скажиset_printoptions
просто напечатать голый поплавок:Мы принудительно подавили экспоненциальное обозначение, но оно не округлено или не оправдано, поэтому укажите дополнительные параметры форматирования:
Недостаток принудительного подавления всех экспоненциальных представлений в ndarrays состоит в том, что если ваш ndarray получит огромное значение с плавающей запятой около бесконечности в нем, и вы распечатаете его, вы получите удар по лицу страницей, полной чисел.
Полный пример Демо 1:
Печать:
Полный пример Демо 2:
Печать:
Обратите внимание, что округление согласованно с точностью до 2 единиц, и экспоненциальная запись подавляется как в очень больших, так
e+x
и в очень малыхe-x
диапазонах.источник
для 1D и 2D массивов вы можете использовать np.savetxt для печати с использованием определенной строки формата:
Ваши варианты с numpy.set_printoptions или numpy.array2string в v1.3 довольно неуклюжи и ограничены (например, нет способа подавить научную запись больших чисел). Похоже, что это изменится с будущими версиями, с numpy.set_printoptions (formatter = ..) и numpy.array2string (style = ..).
источник
Вы могли бы написать функцию, которая преобразует научную запись в обычную, что-то вроде
источник