Как вывести полный массив NumPy без усечения?

Когда я печатаю массив numpy, я получаю усеченное представление, но мне нужен полный массив.

Есть ли способ сделать это?

Примеры:

>>> 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]])
Комментарии к вопросу (5)
Решение

Используйте numpy.set_printoptions:

import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
Комментарии (3)
import numpy as np
np.set_printoptions(threshold=np.inf)

Я предлагаю использовать НП.РСМД вместо `НП.Нань что предложили другие. Они оба работают для вашей цели, но, установив порог, чтобы "Бесконечность" это очевидно всем, читая ваш код, что вы имеете в виду. Имея порог " - а не число" и мне кажется немного расплывчатым.

Комментарии (4)

Предыдущие ответы правильные, но как более слабая альтернатива вы можете преобразовать в список:

>>> numpy.arange(100).reshape(25,4).tolist()

[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21,
22, 23], [24, 25, 26, 27], [28, 29, 30, 31], [32, 33, 34, 35], [36, 37, 38, 39], [40, 41,
42, 43], [44, 45, 46, 47], [48, 49, 50, 51], [52, 53, 54, 55], [56, 57, 58, 59], [60, 61,
62, 63], [64, 65, 66, 67], [68, 69, 70, 71], [72, 73, 74, 75], [76, 77, 78, 79], [80, 81,
82, 83], [84, 85, 86, 87], [88, 89, 90, 91], [92, 93, 94, 95], [96, 97, 98, 99]]
Комментарии (2)

Похоже, что вы используете numpy.

Если это так, вы можете добавить:

import numpy as np
np.set_printoptions(threshold=np.nan)

Это отключит печать углов. Для получения дополнительной информации смотрите этот учебник NumPy Tutorial.

Комментарии (1)

Вот одноразовый способ сделать это, который будет полезен, если вы не хотите менять настройки по умолчанию:

def fullprint(*args, **kwargs):
  from pprint import pprint
  import numpy
  opt = numpy.get_printoptions()
  numpy.set_printoptions(threshold='nan')
  pprint(*args, **kwargs)
  numpy.set_printoptions(**opt)
Комментарии (3)

Включает в 1.15 или новее

Если вы используете библиотеки numpy 1.15 (выпущенный 2018-07-23) или новее, вы можете использовать контекст printoptions менеджер:

with numpy.printoptions(threshold=numpy.inf):
    print(arr)

(конечно, заменить включает купить НП, если это's, как вы импортировали включает в себя)

Использование контекста менеджер ("с" - "блок") гарантирует, что после того, как контекст-менеджера завершится, настройки печати вернуться к тому, что они были до того, как блок начал. Это обеспечивает параметр является временным, и применяется только для кода внутри блока.

Смотрите [и NumPy.документация printoptions] (https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.printoptions.html) для получения подробной информации о контексте менеджер и какие еще доводы он поддерживает.

Комментарии (0)

С помощью контекстного менеджера Павел Цена sugggested

import numpy as np

class fullprint:
    'context manager for printing full numpy arrays'

    def __init__(self, **kwargs):
        kwargs.setdefault('threshold', np.inf)
        self.opt = kwargs

    def __enter__(self):
        self._opt = np.get_printoptions()
        np.set_printoptions(**self.opt)

    def __exit__(self, type, value, traceback):
        np.set_printoptions(**self._opt)

a = np.arange(1001)

with fullprint():
    print(a)

print(a)

with fullprint(threshold=None, edgeitems=10):
    print(a)
Комментарии (2)

и NumPy.savetxt

numpy.savetxt(sys.stdout, numpy.arange(10000))

или если необходимо строку:

import StringIO
sio = StringIO.StringIO()
numpy.savetxt(sio, numpy.arange(10000))
s = sio.getvalue()
print s

Формат вывода по умолчанию:

0.000000000000000000e+00
1.000000000000000000e+00
2.000000000000000000e+00
3.000000000000000000e+00
...

и его можно настроить с дальнейшие рассуждения.

Обратите внимание, в частности, как это не показывает квадратные скобки, и позволяет много настройки, как указано в: https://stackoverflow.com/questions/9360103/how-to-print-a-numpy-array-without-brackets/42046765#42046765

Проверена на Python 2.7.12, библиотеки numpy 1.11.1.

Комментарии (2)

Это небольшая модификация (удален возможность передать дополнительные аргументы set_printoptions)из нэокответ.

Он показывает, как можно использовать contextlib.contextmanager легко создать такой файл contextmanager с меньшим количеством строк кода:

import numpy as np
from contextlib import contextmanager

@contextmanager
def show_complete_array():
    oldoptions = np.get_printoptions()
    np.set_printoptions(threshold=np.inf)
    try:
        yield
    finally:
        np.set_printoptions(**oldoptions)

В коде он может быть использован такой:

a = np.arange(1001)

print(a)      # shows the truncated array

with show_complete_array():
    print(a)  # shows the complete array

print(a)      # shows the truncated array (again)
Комментарии (3)

В дополнение к этому ответить от максимального числа столбцов (так и NumPy.set_printoptions(порог=и NumPy.Нэн)), существует также ограничение символов, которые будут отображаться. В некоторых средах, как при вызове Python из Баш (а не интерактивные сессии), это может быть исправлено путем установки параметралинией` следующим образом.

import numpy as np
np.set_printoptions(linewidth=2000)    # default = 75
Mat = np.arange(20000,20150).reshape(2,75)    # 150 elements (75 columns)
print(Mat)

В этом случае, ваши окна должны ограничить количество символов для переноса строки.

Для тех, кто использует возвышенное текст и хочет увидеть результаты в окне вывода, вы должны добавить опцию строить в "word_wrap на" файла: false для возвышенного-построить [источник] .

Комментарии (0)

Начиная с версии библиотеки numpy 1.16, дополнительные сведения см. В разделе билет на GitHub 12251.

from sys import maxsize
from numpy import set_printoptions

set_printoptions(threshold=maxsize)
Комментарии (0)

Чтобы отключить его и вернуться в нормальный режим

np.set_printoptions(threshold=False)
Комментарии (3)

Предположим, у вас есть массив NumPy

 arr = numpy.arange(10000).reshape(250,40)

Если вы хотите напечатать весь массив в один путь (без переключения между НП.set_printoptions), но хочется чего-то проще (меньше кода), чем контекст менеджер, просто делать

for row in arr:
     print row 
Комментарии (0)

Вы можете использовать array2string функция - docs.

a = numpy.arange(10000).reshape(250,40)
print(numpy.array2string(a, threshold=numpy.nan, max_line_width=numpy.nan))
# [Big output]
Комментарии (1)

Вы выиграли'т хотите, чтобы все элементы напечатаны, особенно для больших массивов.

Простой способ, чтобы показать больше деталей:

In [349]: ar
Out[349]: array([1, 1, 1, ..., 0, 0, 0])

In [350]: ar[:100]
Out[350]:
array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,
       1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1])

Он работает нормально, когда нарезанная массив < 1000 по умолчанию.

Комментарии (0)

Если массив слишком большой, чтобы быть напечатаны, и NumPy автоматически пропускает центральной части массива и печатает только на углах: Чтобы отключить это поведение и вынудить numpy для печати весь массив, вы можете изменить параметры печати с помощью set_printoptions.

>>> np.set_printoptions(threshold='nan')

или

>>> np.set_printoptions(edgeitems=3,infstr='inf',
... linewidth=75, nanstr='nan', precision=8,
... suppress=False, threshold=1000, formatter=None)

Вы также можете обратиться к документация библиотеки numpy документация numpy для "или частью на" для получения дополнительной помощи.

Комментарии (2)