771

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

21 に答える 21

829

使用numpy.set_printoptions

import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
于 2010-01-01T06:26:05.553 に答える
277
import numpy as np
np.set_printoptions(threshold=np.inf)

np.inf他の人が提案しているものの代わりに使用することをお勧めnp.nanします。どちらも目的に応じて機能しますが、しきい値を「無限大」に設定することで、コードを読んでいるすべての人があなたの意味を理解できるようになります。「数値ではない」というしきい値を持つことは、私には少し曖昧に思えます。

于 2014-09-24T14:01:51.697 に答える
144

前の答えは正しいものですが、より弱い代替手段として、リストに変換することができます。

>>> 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]]
于 2015-04-23T13:40:50.660 に答える
133

一時的な設定

NumPy 1.15(2018-07-23リリース)以降を使用している場合は、printoptionsコンテキストマネージャーを使用できます。

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

(もちろん、それがあなたがインポートした方法である場合に置き換えnumpyてください)npnumpy

コンテキストマネージャー(with-block)を使用すると、コンテキストマネージャーが終了した後、印刷オプションがブロックの開始前の状態に戻ります。これにより、設定が一時的なものになり、ブロック内のコードにのみ適用されます。

コンテキストマネージャとそれがサポートするその他の引数の詳細については、numpy.printoptionsドキュメントを参照してください。

于 2018-11-23T18:30:16.763 に答える
47

これを行う1回限りの方法は、デフォルト設定を変更したくない場合に便利です。

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)
于 2014-07-02T23:08:50.283 に答える
41

これは、numpyを使用しているようです。

その場合は、次を追加できます。

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

これにより、コーナー印刷が無効になります。詳細については、このNumPyチュートリアルを参照してください。

于 2010-01-01T02:02:41.577 に答える
36

PaulPriceが提案したようにコンテキストマネージャーを使用する

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)
于 2016-09-09T06:33:55.233 に答える
16

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、numpy1.11.1でテスト済み。

于 2017-02-04T23:22:48.977 に答える
14

これはわずかな変更です(neokの回答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)
于 2017-08-23T05:43:13.067 に答える
10

わずかな変更:(巨大なリストを印刷するため)

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

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

これにより、1行あたりの文字数が増えます(デフォルトの線幅は75)。コーディング環境に適した線幅には、任意の値を使用してください。これにより、1行あたりの文字数を増やすことで、膨大な数の出力行を処理する必要がなくなります。

于 2020-04-23T08:13:11.527 に答える
10
with np.printoptions(edgeitems=50):
    print(x)

50を表示したい行数に変更します

出典:こちら

于 2021-01-20T17:36:34.553 に答える
8

最大列数(で固定)からのこの回答を補完するものnumpy.set_printoptions(threshold=numpy.nan)として、表示される文字数にも制限があります。(インタラクティブセッションではなく)bashからpythonを呼び出す場合など、一部の環境では、パラメーター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を崇高なビルドファイル[ソース]に追加する必要があります。

于 2018-09-28T06:34:48.230 に答える
7

NumPyバージョン1.16以降、詳細についてはGitHubチケット12251を参照してください。

from sys import maxsize
from numpy import set_printoptions

set_printoptions(threshold=maxsize)
于 2019-01-21T20:12:39.577 に答える
7

オフにして通常モードに戻すには

np.set_printoptions(threshold=False)
于 2019-05-24T06:12:02.363 に答える
5

numpy配列があるとします

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

(np.set_printoptionsを切り替えずに)1回限りの方法で配列全体を出力したいが、コンテキストマネージャーよりも単純な(コードが少ない)ものが必要な場合は、次のようにします。

for row in arr:
     print row 
于 2018-05-02T18:33:16.260 に答える
4

jupyterノートブックを使用している場合、これが1回限りのケースの最も簡単なソリューションであることがわかりました。基本的に、numpy配列をリストに変換し、次に文字列に変換してから出力します。これには、配列内にコンマ区切り文字を保持するという利点がありますが、使用する場合は次のようにはなりnumpyp.printoptions(threshold=np.inf)ません。

import numpy as np
print(str(np.arange(10000).reshape(250,40).tolist()))
于 2021-01-12T22:47:14.200 に答える
3

特に大きな配列の場合、必ずしもすべてのアイテムを印刷する必要はありません。

より多くのアイテムを表示する簡単な方法:

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未満の場合、正常に機能します。

于 2019-03-06T05:35:04.810 に答える
3

Jupyterを使用している場合は、変数インスペクター拡張機能を試してください。各変数をクリックすると、配列全体が表示されます。

于 2020-12-23T22:39:51.887 に答える
2

array2string関数--docsを使用できます。

a = numpy.arange(10000).reshape(250,40)
print(numpy.array2string(a, threshold=numpy.nan, max_line_width=numpy.nan))
# [Big output]
于 2018-08-03T13:01:41.767 に答える
1

パンダがいる場合は、

    numpy.arange(10000).reshape(250,40)
    print(pandas.DataFrame(a).to_string(header=False, index=False))

のリセットが必要な副作用を回避しnumpy.set_printoptions(threshold=sys.maxsize)、numpy.arrayとブラケットを取得しません。これは、幅広い配列をログファイルにダンプするのに便利だと思います

于 2020-05-19T03:45:34.150 に答える
-1

配列が大きすぎて印刷できない場合、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ドキュメントを参照することもできます。

于 2017-07-01T13:27:27.433 に答える