Вопрос

Когда я печатаю массив 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]])
Это было полезно?

Решение

Использовать numpy.set_printoptions:

import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)

Другие советы

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

Я предлагаю использовать np.inf вместо np.nan что предлагают другие.Они оба работают для вашей цели, но, установив пороговое значение «бесконечность», всем, кто читает ваш код, становится очевидно, что вы имеете в виду.Порог «не число» кажется мне немного расплывчатым.

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

>>> 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]]

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

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

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

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

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

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)

Использование контекстного менеджера в качестве Пол Прайс предложил

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)

NumPy 1.15 или новее

Если вы используете NumPy 1.15 (выпущен 23 июля 2018 г.) или новее, вы можете использовать printoptions контекстный менеджер:

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

(разумеется, заменить numpy к np если ты так импортировал numpy)

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

Видеть numpy.printoptions документация для получения подробной информации о менеджере контекста и о том, какие другие аргументы он поддерживает.

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
...

и его можно настроить с дополнительными аргументами.

Обратите особое внимание на то, что здесь также не отображаются квадратные скобки и предусмотрены широкие возможности настройки, как указано в: Как распечатать массив Numpy без скобок?

Протестировано на Python 2.7.12, numpy 1.11.1.

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

Он показывает, как вы можете использовать contextlib.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)

В дополнение к этому отвечать от максимального количества столбцов (фиксируется с помощью numpy.set_printoptions(threshold=numpy.nan)), также существует ограничение на количество отображаемых символов.В некоторых средах, например при вызове Python из bash (а не из интерактивного сеанса), это можно исправить, установив параметр linewidth как следующее.

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 в файл возвышенной сборки [источник] .

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

np.set_printoptions(threshold=False)

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

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

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

for row in arr:
     print row 

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

a = numpy.arange(10000).reshape(250,40)
print(numpy.array2string(a, threshold=numpy.nan, max_line_width=numpy.nan))
# [Big output]

Начиная с версии NumPy 1.16, более подробную информацию см. Билет GitHub 12251.

from sys import maxsize
from numpy import set_printoptions

set_printoptions(threshold=maxsize)

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

Простой способ показать больше элементов:

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.

Если массив слишком велик для печати, 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 документация для «или части» для получения дополнительной помощи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top