Когда я печатаю пустой массив, я получаю усеченное представление, но мне нужен полный массив.
Есть какой-либо способ сделать это?
Примеры:
>>> numpy.arange(10000)
array([ 0, 1, 2, ..., 9997, 9998, 9999])
>>> numpy.arange(10000).reshape(250,40)
array([[ 0, 1, 2, ..., 37, 38, 39],
[ 40, 41, 42, ..., 77, 78, 79],
[ 80, 81, 82, ..., 117, 118, 119],
...,
[9880, 9881, 9882, ..., 9917, 9918, 9919],
[9920, 9921, 9922, ..., 9957, 9958, 9959],
[9960, 9961, 9962, ..., 9997, 9998, 9999]])
np.inf
?np.nan
и'nan'
работают только по счастливой случайности, и'nan'
даже не работают в Python 3, потому что они изменили реализацию сравнения смешанного типа, котораяthreshold='nan'
зависела.threshold=np.nan
А не'nan'
зависит от другой лапы, которая является то , что логика печати массива сравнивает размер массива к пороговомуa.size > _summaryThreshold
. Этого всегда возвращаетсяFalse
к_summaryThreshold=np.nan
. Если сравнению былоa.size <= _summaryThreshold
, тестирование ли массив должен быть полностью напечатан вместо тестирования должен ли онtmp
простоlist(tmp)
. Другие варианты с другим форматированием являютсяtmp.tolist()
или для большего контроляprint("\n".join(str(x) for x in tmp))
.Ответы:
Используйте
numpy.set_printoptions
:источник
numpy
массив только один раз, к сожалению, у этого решения есть недостаток: вам нужно сбросить это изменение конфигурации после выполнения печати.Я предлагаю использовать
np.inf
вместо того,np.nan
что предлагается другими. Они оба работают для вашей цели, но, установив порог на «бесконечность», для всех, кто читает ваш код, становится очевидным, что вы имеете в виду. Наличие порога «не число» кажется мне немного расплывчатым.источник
np.set_printoptions(threshold=1000)
он вернется к поведению по умолчанию. Но вы можете установить этот порог как низкий или высокий, как вам нравится.np.set_printoptions(threshold=np.inf)
просто изменяет максимальный размер печатного массива до его усечения до бесконечного, так что он никогда не усекается, независимо от его размера. Если вы установите порог для любого действительного числа, то это будет максимальный размер.np.inf
,np.nan
или'nan'
. Что бы вы ни указали, NumPy все равно будет использовать обычный>
метод для сравнения размера массива с вашим порогом.np.nan
происходит только на работу , потому что этоa.size > _summaryThreshold
вместо тогоa.size <= _summaryThreshold
, иnp.nan
возвращаетFalse
для всех>
/<
/>=
/<=
сравнений.'nan'
работает только из-за хрупких деталей реализации логики сравнения смешанного типа в Python 2; он полностью ломается на Python 3.np.get_printoptions()['threshold']
. Вы можете сохранить это значение до установки порога, а затем восстановить его (или использоватьwith
блок, как предложено в других ответах).Предыдущие ответы правильные, но в качестве более слабой альтернативы вы можете преобразовать их в список:
источник
NumPy 1.15 или новее
Если вы используете NumPy 1.15 (выпущен в 2018-07-23) или новее, вы можете использовать
printoptions
менеджер контекста:(конечно, замените
numpy
,np
если вы импортировали именно такnumpy
)Использование диспетчера контекста (
with
-block) гарантирует, что после завершения диспетчера контекста параметры печати вернутся к тому, что было до запуска блока. Это обеспечивает временную настройку и применяется только к коду внутри блока.Смотрите
numpy.printoptions
документацию для получения подробной информации о менеджере контекста и других аргументах, которые он поддерживает.источник
Похоже, вы используете NumPy.
Если это так, вы можете добавить:
Это отключит печать на углу. Для получения дополнительной информации см. Этот учебник NumPy .
источник
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Вот единственный способ сделать это, который полезен, если вы не хотите изменять настройки по умолчанию:
источник
'nan'
,np.nan
или любой из вышеперечисленных. Это не поддерживается, и этот дурной совет причиняет боль людям, переходящим на python 3numpy.set_printoptions(threshold=numpy.inf)
Использование менеджера контекста , как Пол Цена sugggested
источник
np.printoptions
numpy.savetxt
или если вам нужна строка:
Формат вывода по умолчанию:
и это может быть настроено с дальнейшими аргументами.
Обратите внимание, в частности, как это также не показывает квадратные скобки, и учитывает много настроек, как упомянуто в: Как напечатать массив Numpy без скобок?
Протестировано на Python 2.7.12, numpy 1.11.1.
источник
Это небольшая модификация (удалена возможность передать дополнительные аргументы
set_printoptions)
в neok S ответа.Он показывает, как вы можете
contextlib.contextmanager
легко создать такой менеджер контекста с меньшим количеством строк кода:В вашем коде это можно использовать так:
источник
try
/finally
вокругyield
в менеджере контекста, чтобы очистка происходила несмотря ни на что.with np.printoptions(threshold=np.inf):
В дополнение к этому ответу из максимального количества столбцов (фиксируется с помощью
numpy.set_printoptions(threshold=numpy.nan)
), также есть ограничение на количество отображаемых символов. В некоторых средах, например при вызове python из bash (а не в интерактивном сеансе), это можно исправить, установив параметрlinewidth
следующим образом.В этом случае ваше окно должно ограничивать количество символов для переноса строки.
Для тех, кто использует возвышенный текст и хочет видеть результаты в окне вывода, вы должны добавить опцию
"word_wrap": false
build в файл sublime-build [ source ].источник
Начиная с версии NumPy 1.16, для более подробной информации смотрите билет GitHub 12251 .
источник
Чтобы выключить его и вернуться в обычный режим
источник
threshold=0
, что означает «обрезать как можно скорее» - совсем не то, что вы хотите.Предположим, у вас есть массив NumPy
Если вы хотите напечатать полный массив одноразовым способом (без переключения np.set_printoptions), но хотите что-то более простое (меньше кода), чем менеджер контекста, просто сделайте
источник
Небольшая модификация: (так как вы собираетесь напечатать огромный список)
Это увеличит количество символов в строке (по умолчанию ширина линии равна 75). Используйте любое значение для ширины линии, которое подходит для вашей среды программирования. Это избавит вас от необходимости проходить огромное количество строк вывода, добавляя больше символов в каждой строке.
источник
Вы можете использовать
array2string
функцию - документы .источник
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Не всегда нужно печатать все элементы, особенно для больших массивов.
Простой способ показать больше предметов:
По умолчанию работает нормально, когда нарезанный массив <1000.
источник
Если у вас есть панды в наличии,
Избегает побочного эффекта, требующего сброса,
numpy.set_printoptions(threshold=sys.maxsize)
и вы не получите numpy.array и скобки. Я считаю это удобным для сброса широкого массива в файл журналаисточник
Если массив слишком велик для печати, NumPy автоматически пропускает центральную часть массива и печатает только углы. Чтобы отключить это поведение и заставить NumPy печатать весь массив, вы можете изменить параметры печати, используя
set_printoptions
.или
Вы также можете обратиться к справочной документации для «или части» для получения дополнительной помощи.
источник
'nan'
,np.nan
или любой из вышеперечисленных. Это не поддерживается, и этот дурной совет причиняет боль людям, переходящим на python 3ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation