سؤال

عندما أقوم بطباعة مجموعة 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)

التي سوف تعطيل الطباعة الزاوية. لمزيد من المعلومات ، انظر هذا تعليمي نومبي.

فيما يلي طريقة لمرة واحدة للقيام بذلك ، وهو أمر مفيد إذا كنت لا ترغب في تغيير الإعدادات الافتراضية الخاصة بك:

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)

باستخدام مدير السياق كما بول برايس Suggested

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 (تم إصدارها 2018-07-23) أو الأحدث ، يمكنك استخدام 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)من نيوكS الجواب.

إنه يوضح كيف يمكنك استخدامه 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)

لنفترض أن لديك مجموعة نابية

 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 ، لمزيد من التفاصيل انظر تذكرة جيثب 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 وثائق numpy لـ "أو جزء" لمزيد من المساعدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top