How do I get wider numpy array print output? ( -> Ans. set_printoptions )

所詮表示のことなので「他愛もない」ことではあるんだけども、対話モードでのお試しで結構ストレスになる…。ndarray 印字の自動折り返しの件。

 1 >>> import numpy as np
 2 >>> np.get_printoptions()["linewidth"]
 3 75
 4 >>> a = np.full((10, 10), np.nan)
 5 >>> for i in range(5, 1, -1):
 6 ...     a[i:4 + i, i:4 + i] = i
 7 ... 
 8 >>> a
 9 array([[ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
10        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
11        [ nan,  nan,   2.,   2.,   2.,   2.,  nan,  nan,  nan,  nan],
12        [ nan,  nan,   2.,   2.,   2.,   2.,   3.,  nan,  nan,  nan],
13        [ nan,  nan,   2.,   2.,   2.,   2.,   3.,   4.,  nan,  nan],
14        [ nan,  nan,   2.,   2.,   2.,   2.,   3.,   4.,   5.,  nan],
15        [ nan,  nan,  nan,   3.,   3.,   3.,   3.,   4.,   5.,  nan],
16        [ nan,  nan,  nan,  nan,   4.,   4.,   4.,   4.,   5.,  nan],
17        [ nan,  nan,  nan,  nan,  nan,   5.,   5.,   5.,   5.,  nan],
18        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan]])
19 >>> np.isnan(a)
20 array([[ True,  True,  True,  True,  True,  True,  True,  True,  True,
21          True],
22        [ True,  True,  True,  True,  True,  True,  True,  True,  True,
23          True],
24        [ True,  True, False, False, False, False,  True,  True,  True,
25          True],
26        [ True,  True, False, False, False, False, False,  True,  True,
27          True],
28        [ True,  True, False, False, False, False, False, False,  True,
29          True],
30        [ True,  True, False, False, False, False, False, False, False,
31          True],
32        [ True,  True,  True, False, False, False, False, False, False,
33          True],
34        [ True,  True,  True,  True, False, False, False, False, False,
35          True],
36        [ True,  True,  True,  True,  True, False, False, False, False,
37          True],
38        [ True,  True,  True,  True,  True,  True,  True,  True,  True,
39          True]], dtype=bool)
40 >>> np.set_printoptions(linewidth=200)
41 >>> np.isnan(a)
42 array([[ True,  True,  True,  True,  True,  True,  True,  True,  True,  True],
43        [ True,  True,  True,  True,  True,  True,  True,  True,  True,  True],
44        [ True,  True, False, False, False, False,  True,  True,  True,  True],
45        [ True,  True, False, False, False, False, False,  True,  True,  True],
46        [ True,  True, False, False, False, False, False, False,  True,  True],
47        [ True,  True, False, False, False, False, False, False, False,  True],
48        [ True,  True,  True, False, False, False, False, False, False,  True],
49        [ True,  True,  True,  True, False, False, False, False, False,  True],
50        [ True,  True,  True,  True,  True, False, False, False, False,  True],
51        [ True,  True,  True,  True,  True,  True,  True,  True,  True,  True]], dtype=bool)

別解、というか、「表示の有効桁数を削るだけでもいい」なら、

 1 >>> import numpy as np
 2 >>> np.get_printoptions()["precision"]
 3 8
 4 >>> a = np.full((10, 10), np.nan)
 5 >>> for i in range(5, 1, -1):
 6 ...     a[i:4 + i, i:4 + i] = np.sin(i)
 7 ... 
 8 >>> a
 9 array([[        nan,         nan,         nan,         nan,         nan,
10                 nan,         nan,         nan,         nan,         nan],
11        [        nan,         nan,         nan,         nan,         nan,
12                 nan,         nan,         nan,         nan,         nan],
13        [        nan,         nan,  0.90929743,  0.90929743,  0.90929743,
14          0.90929743,         nan,         nan,         nan,         nan],
15        [        nan,         nan,  0.90929743,  0.90929743,  0.90929743,
16          0.90929743,  0.14112001,         nan,         nan,         nan],
17        [        nan,         nan,  0.90929743,  0.90929743,  0.90929743,
18          0.90929743,  0.14112001, -0.7568025 ,         nan,         nan],
19        [        nan,         nan,  0.90929743,  0.90929743,  0.90929743,
20          0.90929743,  0.14112001, -0.7568025 , -0.95892427,         nan],
21        [        nan,         nan,         nan,  0.14112001,  0.14112001,
22          0.14112001,  0.14112001, -0.7568025 , -0.95892427,         nan],
23        [        nan,         nan,         nan,         nan, -0.7568025 ,
24         -0.7568025 , -0.7568025 , -0.7568025 , -0.95892427,         nan],
25        [        nan,         nan,         nan,         nan,         nan,
26         -0.95892427, -0.95892427, -0.95892427, -0.95892427,         nan],
27        [        nan,         nan,         nan,         nan,         nan,
28                 nan,         nan,         nan,         nan,         nan]])
29 >>> np.set_printoptions(precision=1)
30 >>> a
31 array([[ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
32        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
33        [ nan,  nan,  0.9,  0.9,  0.9,  0.9,  nan,  nan,  nan,  nan],
34        [ nan,  nan,  0.9,  0.9,  0.9,  0.9,  0.1,  nan,  nan,  nan],
35        [ nan,  nan,  0.9,  0.9,  0.9,  0.9,  0.1, -0.8,  nan,  nan],
36        [ nan,  nan,  0.9,  0.9,  0.9,  0.9,  0.1, -0.8, -1. ,  nan],
37        [ nan,  nan,  nan,  0.1,  0.1,  0.1,  0.1, -0.8, -1. ,  nan],
38        [ nan,  nan,  nan,  nan, -0.8, -0.8, -0.8, -0.8, -1. ,  nan],
39        [ nan,  nan,  nan,  nan,  nan, -1. , -1. , -1. , -1. ,  nan],
40        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan]])

なお、この表示で「非数値文字列」となるのが、非数NaNと無限大infの2つだが、この「nan」「inf」という文字列を変更することも出来る。出来るけどやってみせない。この一連の流れでわかるはず。

それよりも、「全部見たいのに! / 全部なんか見たくないのに! / もっと見たいのに!」の制御の方がやりたいこと多いんじゃないかな。同じ set_printoptions では、こちらのほうが良くお世話になる。

  1 >>> import numpy as np
  2 >>> np.set_printoptions(linewidth=200)
  3 >>> a = np.arange(1001)
  4 >>> a
  5 array([   0,    1,    2, ...,  998,  999, 1000])
  6 >>> np.get_printoptions()['edgeitems']
  7 3
  8 >>> np.set_printoptions(edgeitems=5)
  9 >>> a
 10 array([   0,    1,    2,    3,    4, ...,  996,  997,  998,  999, 1000])
 11 >>> np.get_printoptions()['threshold']
 12 1000
 13 >>> np.set_printoptions(threshold=1001)
 14 >>> a
 15 array([   0,    1,    2,    3,    4,    5,    6,    7,    8,    9,   10,
 16          11,   12,   13,   14,   15,   16,   17,   18,   19,   20,   21,
 17          22,   23,   24,   25,   26,   27,   28,   29,   30,   31,   32,
 18          33,   34,   35,   36,   37,   38,   39,   40,   41,   42,   43,
 19          44,   45,   46,   47,   48,   49,   50,   51,   52,   53,   54,
 20          55,   56,   57,   58,   59,   60,   61,   62,   63,   64,   65,
 21          66,   67,   68,   69,   70,   71,   72,   73,   74,   75,   76,
 22          77,   78,   79,   80,   81,   82,   83,   84,   85,   86,   87,
 23          88,   89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
 24          99,  100,  101,  102,  103,  104,  105,  106,  107,  108,  109,
 25         110,  111,  112,  113,  114,  115,  116,  117,  118,  119,  120,
 26         121,  122,  123,  124,  125,  126,  127,  128,  129,  130,  131,
 27         132,  133,  134,  135,  136,  137,  138,  139,  140,  141,  142,
 28         143,  144,  145,  146,  147,  148,  149,  150,  151,  152,  153,
 29         154,  155,  156,  157,  158,  159,  160,  161,  162,  163,  164,
 30         165,  166,  167,  168,  169,  170,  171,  172,  173,  174,  175,
 31         176,  177,  178,  179,  180,  181,  182,  183,  184,  185,  186,
 32         187,  188,  189,  190,  191,  192,  193,  194,  195,  196,  197,
 33         198,  199,  200,  201,  202,  203,  204,  205,  206,  207,  208,
 34         209,  210,  211,  212,  213,  214,  215,  216,  217,  218,  219,
 35         220,  221,  222,  223,  224,  225,  226,  227,  228,  229,  230,
 36         231,  232,  233,  234,  235,  236,  237,  238,  239,  240,  241,
 37         242,  243,  244,  245,  246,  247,  248,  249,  250,  251,  252,
 38         253,  254,  255,  256,  257,  258,  259,  260,  261,  262,  263,
 39         264,  265,  266,  267,  268,  269,  270,  271,  272,  273,  274,
 40         275,  276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
 41         286,  287,  288,  289,  290,  291,  292,  293,  294,  295,  296,
 42         297,  298,  299,  300,  301,  302,  303,  304,  305,  306,  307,
 43         308,  309,  310,  311,  312,  313,  314,  315,  316,  317,  318,
 44         319,  320,  321,  322,  323,  324,  325,  326,  327,  328,  329,
 45         330,  331,  332,  333,  334,  335,  336,  337,  338,  339,  340,
 46         341,  342,  343,  344,  345,  346,  347,  348,  349,  350,  351,
 47         352,  353,  354,  355,  356,  357,  358,  359,  360,  361,  362,
 48         363,  364,  365,  366,  367,  368,  369,  370,  371,  372,  373,
 49         374,  375,  376,  377,  378,  379,  380,  381,  382,  383,  384,
 50         385,  386,  387,  388,  389,  390,  391,  392,  393,  394,  395,
 51         396,  397,  398,  399,  400,  401,  402,  403,  404,  405,  406,
 52         407,  408,  409,  410,  411,  412,  413,  414,  415,  416,  417,
 53         418,  419,  420,  421,  422,  423,  424,  425,  426,  427,  428,
 54         429,  430,  431,  432,  433,  434,  435,  436,  437,  438,  439,
 55         440,  441,  442,  443,  444,  445,  446,  447,  448,  449,  450,
 56         451,  452,  453,  454,  455,  456,  457,  458,  459,  460,  461,
 57         462,  463,  464,  465,  466,  467,  468,  469,  470,  471,  472,
 58         473,  474,  475,  476,  477,  478,  479,  480,  481,  482,  483,
 59         484,  485,  486,  487,  488,  489,  490,  491,  492,  493,  494,
 60         495,  496,  497,  498,  499,  500,  501,  502,  503,  504,  505,
 61         506,  507,  508,  509,  510,  511,  512,  513,  514,  515,  516,
 62         517,  518,  519,  520,  521,  522,  523,  524,  525,  526,  527,
 63         528,  529,  530,  531,  532,  533,  534,  535,  536,  537,  538,
 64         539,  540,  541,  542,  543,  544,  545,  546,  547,  548,  549,
 65         550,  551,  552,  553,  554,  555,  556,  557,  558,  559,  560,
 66         561,  562,  563,  564,  565,  566,  567,  568,  569,  570,  571,
 67         572,  573,  574,  575,  576,  577,  578,  579,  580,  581,  582,
 68         583,  584,  585,  586,  587,  588,  589,  590,  591,  592,  593,
 69         594,  595,  596,  597,  598,  599,  600,  601,  602,  603,  604,
 70         605,  606,  607,  608,  609,  610,  611,  612,  613,  614,  615,
 71         616,  617,  618,  619,  620,  621,  622,  623,  624,  625,  626,
 72         627,  628,  629,  630,  631,  632,  633,  634,  635,  636,  637,
 73         638,  639,  640,  641,  642,  643,  644,  645,  646,  647,  648,
 74         649,  650,  651,  652,  653,  654,  655,  656,  657,  658,  659,
 75         660,  661,  662,  663,  664,  665,  666,  667,  668,  669,  670,
 76         671,  672,  673,  674,  675,  676,  677,  678,  679,  680,  681,
 77         682,  683,  684,  685,  686,  687,  688,  689,  690,  691,  692,
 78         693,  694,  695,  696,  697,  698,  699,  700,  701,  702,  703,
 79         704,  705,  706,  707,  708,  709,  710,  711,  712,  713,  714,
 80         715,  716,  717,  718,  719,  720,  721,  722,  723,  724,  725,
 81         726,  727,  728,  729,  730,  731,  732,  733,  734,  735,  736,
 82         737,  738,  739,  740,  741,  742,  743,  744,  745,  746,  747,
 83         748,  749,  750,  751,  752,  753,  754,  755,  756,  757,  758,
 84         759,  760,  761,  762,  763,  764,  765,  766,  767,  768,  769,
 85         770,  771,  772,  773,  774,  775,  776,  777,  778,  779,  780,
 86         781,  782,  783,  784,  785,  786,  787,  788,  789,  790,  791,
 87         792,  793,  794,  795,  796,  797,  798,  799,  800,  801,  802,
 88         803,  804,  805,  806,  807,  808,  809,  810,  811,  812,  813,
 89         814,  815,  816,  817,  818,  819,  820,  821,  822,  823,  824,
 90         825,  826,  827,  828,  829,  830,  831,  832,  833,  834,  835,
 91         836,  837,  838,  839,  840,  841,  842,  843,  844,  845,  846,
 92         847,  848,  849,  850,  851,  852,  853,  854,  855,  856,  857,
 93         858,  859,  860,  861,  862,  863,  864,  865,  866,  867,  868,
 94         869,  870,  871,  872,  873,  874,  875,  876,  877,  878,  879,
 95         880,  881,  882,  883,  884,  885,  886,  887,  888,  889,  890,
 96         891,  892,  893,  894,  895,  896,  897,  898,  899,  900,  901,
 97         902,  903,  904,  905,  906,  907,  908,  909,  910,  911,  912,
 98         913,  914,  915,  916,  917,  918,  919,  920,  921,  922,  923,
 99         924,  925,  926,  927,  928,  929,  930,  931,  932,  933,  934,
100         935,  936,  937,  938,  939,  940,  941,  942,  943,  944,  945,
101         946,  947,  948,  949,  950,  951,  952,  953,  954,  955,  956,
102         957,  958,  959,  960,  961,  962,  963,  964,  965,  966,  967,
103         968,  969,  970,  971,  972,  973,  974,  975,  976,  977,  978,
104         979,  980,  981,  982,  983,  984,  985,  986,  987,  988,  989,
105         990,  991,  992,  993,  994,  995,  996,  997,  998,  999, 1000])

というか、しばらくやってなかったらすっかり忘れてたので、個人的備忘録なのであった。をしまい。