কাটা ছাড়াই কীভাবে পূর্ণ নুমপি অ্যারে প্রিন্ট করবেন?


587

যখন আমি একটি নমপি অ্যারে মুদ্রণ করি তখন আমি একটি ছিন্ন ছিটিয়ে উপস্থাপনা পাই তবে আমি সম্পূর্ণ অ্যারে চাই।

এই কাজ করতে কোন উপায় আছে কি?

উদাহরণ:

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

18
"ওয়ান অফ" ভিত্তিতে এটি করার কোনও উপায় আছে কি? অর্থাত একবার সম্পূর্ণ আউটপুট মুদ্রণ করতে, তবে স্ক্রিপ্টে অন্য সময়ে নয়?
tumultous_rooster

4
@ ম্যাট ও'ব্রায়ান জেডএসজির উত্তর নীচে দেখুন
ব্যবহারকারী 2398029

6
আপনি কি একটি প্রস্তাবিত এর গ্রহণযোগ্য উত্তর পরিবর্তন করতে পারেন np.inf? np.nanএবং 'nan'কেবল মোট ফ্লুক দ্বারা 'nan'কাজ করে এবং পাইথন 3 তেও কাজ করে না কারণ তারা মিশ্রিত-ধরণের তুলনা বাস্তবায়নকে পরিবর্তিত করে যা threshold='nan'নির্ভর করে।
ব্যবহারকারী 2357112 মনিকা

1
( threshold=np.nanবরং 'nan'একটি ভিন্ন অপ্রত্যাশিত সাফল্য, যা যে অ্যারের মুদ্রণ যুক্তি দিয়ে থ্রেশহোল্ড অ্যারের আকার তুলনা উপর নির্ভর করে a.size > _summaryThreshold। এই সবসময় রিটার্ন Falseজন্য _summaryThreshold=np.nan। যদি তুলনা করা হয়েছে a.size <= _summaryThreshold, পরীক্ষা করিয়া অ্যারের সম্পূর্ণরূপে পরিবর্তে পরীক্ষার মুদ্রিত করা হবে কিনা তা এটি করা উচিত সংক্ষিপ্তসার হিসাবে
জানুন

4
"ওয়ান বন্ধ" এরকম প্রণালী: আপনি যদি numpy.array থাকে তাহলে tmpশুধু list(tmp)। বিভিন্ন বিন্যাস সহ অন্যান্য বিকল্পগুলি tmp.tolist()বা আরও নিয়ন্ত্রণের জন্য print("\n".join(str(x) for x in tmp))
travc

উত্তর:


626

ব্যবহার numpy.set_printoptions:

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

2
আপনি যদি numpyকেবল একবার কেবল অ্যারে মুদ্রণ করতে চান তবে দুর্ভাগ্যক্রমে এই সমাধানটির মুদ্রণটি করার পরে আপনাকে এই কনফিগারেশন পরিবর্তনটি পুনরায় সেট করতে হবে এমন ক্ষতি হবে।
ট্রেভর বয়ড স্মিথ

1
@ ট্র্যাভারবয়ডস্মিথ, আপনি কি জানেন যে কীভাবে মুদ্রণের পরে এই পরামিতিটি পুনরায় সেট করতে হবে?
কলিনম্যাক

1
@ColinMac দেখতে stackoverflow.com/a/24542498/52074 যেখানে তিনি সেটিংস সংরক্ষণ করে। একটি অপারেশন করে। তারপরে সেটিংস পুনরুদ্ধার করুন।
ট্রেভর বয়ড স্মিথ

1
এবং কীভাবে এটিকে স্বাভাবিক অবস্থায় পুনরায় সেট করবেন?
গুলজার

প্রান্তিক আকারের ম্যানুয়ালি প্রবেশের কোনও উপায় আছে কি?
আমার কুমার

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

আমি এর np.infপরিবর্তে np.nanঅন্যদের দ্বারা প্রস্তাবিত ব্যবহার করার পরামর্শ দিই । তারা উভয়ই আপনার উদ্দেশ্যে কাজ করে তবে "অনন্ত" এর প্রান্তিক স্থাপন করে আপনার কোডটি কী বোঝাতে চাইছেন তা সবার কাছে স্পষ্ট। "সংখ্যা নয়" এর একটি থ্রোসোল্ড থাকা আমার কাছে কিছুটা অস্পষ্ট বলে মনে হয়।


15
এর বিপরীতমুখী অপারেশনটি কী? আগের বিন্যাসে (বিন্দু সহ) কীভাবে ফিরে যাবেন?
কার্লো

9
@ কার্লো ডিফল্ট নম্বরটি 1000, সুতরাং np.set_printoptions(threshold=1000)এটি এটিকে ডিফল্ট আচরণে ফিরিয়ে আনবে। তবে আপনি এই প্রান্তিকটিকে আপনার পছন্দ মতো কম বা উচ্চতর সেট করতে পারেন। np.set_printoptions(threshold=np.inf)কোনও মুদ্রিত অ্যারেটি কেবল অসীমে ছাঁটাই হওয়ার আগেই সর্বাধিক আকার পরিবর্তন করে, যাতে এটি যত বড়ই হোক না কেন এটি কেটে যায় না। আপনি যদি কোনও আসল সংখ্যার প্রান্তিক সেট করে থাকেন তবে তা সর্বাধিক আকার হবে।
পলম্যাগ

8
কেবল এই পরিষ্কার নয়, এটি ভঙ্গুরও অনেক কম। নেই কোন বিশেষ হ্যান্ডলিং জন্য np.inf, np.nanঅথবা 'nan'। আপনি সেখানে যা কিছু রাখুন, নম্পপি এখনও >আপনার প্রান্তিকের সাথে অ্যারের আকারের তুলনা করতে একটি সমতল ব্যবহার করবে । np.nanএটি কেবল তার a.size > _summaryThresholdপরিবর্তে কাজ করার কারণে ঘটে a.size <= _summaryThresholdএবং সমস্ত / / / তুলনার জন্য np.nanফিরে আসে । পাইথন 2 এর মিক্সড-টাইপ তুলনা যুক্তির ভঙ্গুর বাস্তবায়ন বিশদের কারণে কেবল কাজ করার জন্যই ঘটে; এটি পাইথন 3 এ সম্পূর্ণরূপে বিরতি দেয়False><>=<='nan'
ব্যবহারকারী 2357112

2
মান যেহেতু sys.maxsize ব্যবহারের কোন int হতে নথিভুক্ত করা
mattip

2
@ কার্লোর প্রশ্নের সঠিক উত্তর দিতে, নোট করুন যে মুদ্রণ বিকল্পগুলির প্রান্তিকের জন্য প্রাথমিক মানটি পাওয়া গেছে np.get_printoptions()['threshold']। প্রান্তিক মান নির্ধারণের আগে আপনি এই মানটি সংরক্ষণ করতে পারেন এবং তারপরে এটি পুনরুদ্ধার করতে পারেন (বা withঅন্য উত্তরে প্রস্তাবিত হিসাবে একটি ব্লক ব্যবহার করুন )।
নিনজাকানন

94

পূর্ববর্তী উত্তরগুলি সঠিক উত্তরগুলি রয়েছে তবে দুর্বল বিকল্প হিসাবে আপনি একটি তালিকায় রূপান্তর করতে পারেন:

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

14
মুদ্রণ বিবৃতিতে আপনার সম্পূর্ণ অ্যারেটি দেখার এটি সর্বোত্তম এক-অফ উপায়।
অ্যারন ব্রামসন

@ অ্যারনব্র্যামসন আমি সম্মত হই ... আপনার যখন মাত্র একটি মুদ্রণ বিবৃতি প্রয়োজন (কোডের একটি লাইন বিপরীতে 3 টি লাইনের বিপরীতে: কনফিগার পরিবর্তন করুন, মুদ্রণ করুন, কনফিগার করুন কনফিগার করুন)
ট্রেভর বয়ড স্মিথ

আমি এটি পছন্দ করি যে এটি কমা বিভাজকগুলি মুদ্রণ করে
ওবিউশিচিল্ড

57

NumPy 1.15 বা আরও নতুন

আপনি যদি NumPy 1.15 (প্রকাশিত 2018-07-23) বা আরও নতুন ব্যবহার করেন তবে আপনি printoptionsপ্রসঙ্গ পরিচালকটি ব্যবহার করতে পারেন :

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

(অবশ্যই, প্রতিস্থাপন numpyদ্বারা npযদি করি, কেমন আমদানিকৃত numpy)

কনটেক্সট ম্যানেজারের ব্যবহার (দ্য- withব্লক) নিশ্চিত করে যে কনটেক্সট ম্যানেজারটি শেষ হওয়ার পরে, মুদ্রণ বিকল্পগুলি ব্লক শুরুর আগে যা কিছু ছিল সেগুলিতে ফিরে আসবে। এটি নিশ্চিত করে যে সেটিংসটি অস্থায়ী এবং কেবলমাত্র ব্লকের কোডগুলিতে প্রয়োগ।

কনটেক্সট ম্যানেজার এবং অন্যান্য কোন যুক্তি এটি সমর্থন করে তার বিশদগুলির জন্য numpy.printoptionsডকুমেন্টেশন দেখুন ।


41

এইগুলি আপনি অদ্ভুত ব্যবহার করছেন বলে মনে হচ্ছে।

যদি এটি হয় তবে আপনি যুক্ত করতে পারেন:

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

এটি কোণার মুদ্রণটি অক্ষম করবে। আরও তথ্যের জন্য এই NumPy টিউটোরিয়ালটি দেখুন


4
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
এরিক

হ্যাঁ, অফিশিয়াল নম্পি টিউটোরিয়ালটির সেই অংশটি ভুল
অ্যাডারচক্স

36

এটি করার একদল উপায় এখানে আপনি ডিফল্ট সেটিংস পরিবর্তন করতে না চাইলে এটি কার্যকর:

def fullprint(*args, **kwargs):
  from pprint import pprint
  import numpy
  opt = numpy.get_printoptions()
  numpy.set_printoptions(threshold=numpy.inf)
  pprint(*args, **kwargs)
  numpy.set_printoptions(**opt)

13
দেখে মনে হচ্ছে এটি একটি প্রসঙ্গ পরিচালক ব্যবহার করার জন্য ভাল জায়গা হবে, তাই আপনি "ফুলপ্রিন্ট সহ" বলতে পারেন।
পল দাম

8
ব্যবহার করবেন না 'nan', np.nanঅথবা উপরে কোন। এটি অসমর্থিত, এবং এই খারাপ পরামর্শটি পাইথন 3-এ স্থানান্তরিত লোকদের জন্য যন্ত্রণা সৃষ্টি করছে
এরিক

1
@ জেডএসজি লাইন 5 এর সাথে প্রতিস্থাপন করুনnumpy.set_printoptions(threshold=numpy.inf)
নির্মল

ধন্যবাদ @ নির্মল, আমি এই 2014 উত্তরটি সম্পাদনা করেছি যাতে এটি আজ কাজ করে।
পল রাউজিউক্স 13

31

পল প্রাইস সাগজেস্ট হিসাবে একটি কনটেক্সট ম্যানেজার ব্যবহার করে

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)


if __name__ == '__main__': 
    a = np.arange(1001)

    with fullprint():
        print(a)

    print(a)

    with fullprint(threshold=None, edgeitems=10):
        print(a)

7
এ প্রসঙ্গে পরিচালক numpy 1.15 পাতাটা, এর ধন্যবাদ github.com/numpy/numpy/pull/10406 নামের অধীনে,np.printoptions
এরিক

13

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

এবং এটি আরও যুক্তি দিয়ে কনফিগার করা যেতে পারে।

বিশেষত নোট করুন কীভাবে এটি স্কোয়ার বন্ধনীগুলিও দেখায় না এবং প্রচুর কাস্টমাইজেশনের অনুমতি দেয় যেমন: উল্লিখিত: বন্ধনী ছাড়া কোনও নম্পি অ্যারে কীভাবে প্রিন্ট করা যায়?

পাইথন ২.7.১২ তে পরীক্ষা করা


1
এই পদ্ধতির সামান্য
অসুবিধাটি হ'ল

এই তথ্যের জন্য @ ফোরর্ডকে ধন্যবাদ, আপনি যদি কোনও কর্মসংস্থান খুঁজে পান তবে আমাকে জানান!
সিরো সান্তিলি :5 冠状 病 六四 事件

10

এটি সামান্য পরিবর্তন ( নব্য এস এর উত্তরের অতিরিক্ত যুক্তি পাস করার বিকল্পটি সরিয়ে দেওয়া হয়েছে 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)

1
আপনার সবসময় একটি প্রসঙ্গে থাকা পরিচালককে try/ এর finallyআশেপাশে রাখা উচিত yield, যাতে পরিষ্কার-পরিচ্ছন্নতা যাই ঘটুক না কেন।
এরিক

1
@ এরিক সত্যই। আপনার সহায়ক মন্তব্যের জন্য আপনাকে ধন্যবাদ এবং আমি উত্তর আপডেট করেছি।
এমসিফার্ট

1.15 এ, এটি বানান করা যেতে পারেwith np.printoptions(threshold=np.inf):
এরিক

6

সর্বাধিক সংখ্যক কলাম (এই সংশোধন করা ) থেকে এই উত্তরের পরিপূরক numpy.set_printoptions(threshold=numpy.nan), অক্ষরের একটি সীমাবদ্ধতাও প্রদর্শিত হবে। কিছু পরিবেশে যেমন বাশ থেকে অজগরকে কল করার সময় (ইন্টারেক্টিভ সেশনের চেয়ে), প্যারামিটারটিকে 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চাইলে আপনার সাবমাইম-বিল্ড ফাইল [ উত্স ] এ বিল্ড বিকল্পটি যুক্ত করা উচিত ।



4

এটি বন্ধ করতে এবং সাধারণ মোডে ফিরে যেতে

np.set_printoptions(threshold=False)

এটি আমার জন্য কাজ করে (জুপিটার অজগর সংস্করণ 3)। আপনি নীচের কোডটি চেষ্টা করে দেখতে পারেন the এটি আমার পক্ষেও করেছিল। > এনপি.সেট_প্রিন্টপশনস (এজাইটাইটামস = 3, ইনফ্রাস্টার = 'ইনফ', লাইনউইথ = 75, ন্যানস্টার = 'নান', স্পষ্টতা = 8, দমন = মিথ্যা, প্রান্তিক = 1000, ফর্ম্যাটার = কিছুই নেই)
এভালেল

ঠিক আছে, এটি অবশ্যই হবে কারণ আমি জুপিটার ব্যবহার করছি না। গৃহীত উত্তরটি যদিও খাঁটি অজগর পরিবেশে আমার পক্ষে কাজ করে।
ম্যাথিউ

এর অর্থ threshold=0, যার অর্থ "যত তাড়াতাড়ি সম্ভব কাটা" - আপনি যা চান না তা নয়।
এরিক 19

2

ধরুন আপনার কাছে একটি ন্যারি অ্যারে আছে

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

আপনি যদি এক-উপায়ে পুরো অ্যারেটি প্রিন্ট করতে চান (এনপি.সেট_প্রিন্টগুলি টগল না করে) তবে প্রসঙ্গ পরিচালকের চেয়ে সহজ কিছু (কম কোড) চান, কেবল করুন

for row in arr:
     print row 

2

সামান্য পরিবর্তন: (যেহেতু আপনি একটি বিশাল তালিকা মুদ্রণ করতে যাচ্ছেন)

import numpy as np
np.set_printoptions(threshold=np.inf, linewidth=200)

x = np.arange(1000)
print(x)

এটি প্রতি লাইনে অক্ষরের সংখ্যা বৃদ্ধি করবে (75 এর ডিফল্ট লাইনউইথ)। আপনার কোডিং পরিবেশের জন্য উপযুক্ত লাইনউইথের জন্য আপনার পছন্দ মতো কোনও মান ব্যবহার করুন। এটি আপনাকে প্রতি লাইনে আরও অক্ষর যুক্ত করে বিপুল সংখ্যক আউটপুট লাইনে যাওয়ার হাত থেকে রক্ষা করবে।



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.arange(10000).reshape(250,40)
    print(pandas.DataFrame(a).to_string(header=False, index=False))

পুনরায় সেট করার প্রয়োজনের পার্শ্ব প্রতিক্রিয়া এড়িয়ে যায় numpy.set_printoptions(threshold=sys.maxsize)এবং আপনি numpy.array এবং বন্ধনীগুলি পান না। লগ ফাইলে প্রশস্ত অ্যারে ফেলে দেওয়ার জন্য আমি এটি সুবিধাজনক বলে মনে করি


-1

যদি কোনও অ্যারে মুদ্রিত হওয়ার জন্য খুব বড় হয় তবে নুমপি স্বয়ংক্রিয়ভাবে অ্যারের কেন্দ্রীয় অংশটি এড়িয়ে চলে এবং কেবল কোণগুলি মুদ্রণ করে: এই আচরণটি অক্ষম করতে এবং নুমপিকে জোর করে অ্যারেটি মুদ্রণ করতে বাধ্য করতে আপনি ব্যবহার করে মুদ্রণের বিকল্পগুলি পরিবর্তন করতে পারেন 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)

আরও সহায়তার জন্য আপনি "বা অংশ" এর জন্য ন্যালি ডকুমেন্টেশন নাম্বার ডকুমেন্টেশনও উল্লেখ করতে পারেন।


3
ব্যবহার করবেন না 'nan', np.nanঅথবা উপরে কোন। এটি অসমর্থিত, এবং এই খারাপ পরামর্শটি পাইথন 3-এ স্থানান্তরিত লোকদের জন্য যন্ত্রণা সৃষ্টি করছে
এরিক

ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
এরিক 19 ই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.