20

I tested PyCharm and IDLE, both of them print the 7th number to a second line.

Input:

import numpy as np
a=np.array([ 1.02090721,  1.02763091,  1.03899317,  1.00630297,  1.00127454, 0.89916715,  1.04486896])
print(a)

Output:

[ 1.02090721  1.02763091  1.03899317  1.00630297  1.00127454  0.89916715
  1.04486896]

How can I print them in one line?

MSeifert
  • 145,886
  • 38
  • 333
  • 352
lanselibai
  • 1,203
  • 2
  • 19
  • 35
  • This only happens because your IDE is line wrapping the console. – alessandrocb Mar 22 '18 at 20:25
  • here's a duplicate post with an answer https://stackoverflow.com/questions/44139508/print-numpy-ndarray-on-a-single-line – zerocool Mar 22 '18 at 20:25
  • it is not duplicate, in my case, the dimension is 1x7 – lanselibai Mar 22 '18 at 20:27
  • 1
    @alessandrocb, I know wrapping, but my case is not wrapping, it is just printing the 7th to a second line. – lanselibai Mar 22 '18 at 20:28
  • @zerocool That question explicitly set `linewidth` to 1000 and it didn't help because it wasn't a 1D array. For this question, the answer is just to set `linewidth`. (Plus, that questioner wanted the list equivalent, this one doesn't.) – abarnert Mar 22 '18 at 20:30
  • The answer in the question involved typecasting. The easiest solution is to type cast the np.array to a list when printing... print(list(a)) prints it out on one line. – zerocool Mar 22 '18 at 20:31

3 Answers3

20

There is np.set_printoptions which allows to modify the "line-width" of the printed NumPy array:

>>> import numpy as np

>>> np.set_printoptions(linewidth=np.inf)
>>> a = np.array([ 1.02090721,  1.02763091,  1.03899317,  1.00630297,  1.00127454, 0.89916715,  1.04486896])
>>> print(a)
[1.02090721 1.02763091 1.03899317 1.00630297 1.00127454 0.89916715 1.04486896]

It will print all 1D arrays in one line. It won't work that easily with multidimensional arrays.


Similar to here you could use a contextmanager if you just want to temporarily change that:

import numpy as np
from contextlib import contextmanager

@contextmanager
def print_array_on_one_line():
    oldoptions = np.get_printoptions()
    np.set_printoptions(linewidth=np.inf)
    yield
    np.set_printoptions(**oldoptions)

Then you use it like this (fresh interpreter session assumed):

>>> import numpy as np
>>> np.random.random(10)  # default
[0.12854047 0.35702647 0.61189795 0.43945279 0.04606867 0.83215714
 0.4274313  0.6213961  0.29540808 0.13134124]

>>> with print_array_on_one_line():  # in this block it will be in one line
...     print(np.random.random(10))
[0.86671089 0.68990916 0.97760075 0.51284228 0.86199111 0.90252942 0.0689861  0.18049253 0.78477971 0.85592009]

>>> np.random.random(10)  # reset
[0.65625313 0.58415921 0.17207238 0.12483019 0.59113892 0.19527236
 0.20263972 0.30875768 0.50692189 0.02021453]
MSeifert
  • 145,886
  • 38
  • 333
  • 352
10

If you want a customized version of str(a), the answer is array_str:

>>> print(a)
[ 1.02090721  1.02763091  1.03899317  1.00630297  1.00127454  0.89916715
  1.04486896]
>>> str(a)
'[1.02090721 1.02763091 1.03899317 1.00630297 1.00127454 0.89916715\n 1.04486896]'
>>> np.array_str(a, max_line_width=np.inf)
'[1.02090721 1.02763091 1.03899317 1.00630297 1.00127454 0.89916715 1.04486896]'
>>> print(np.array_str(a, max_line_width=np.inf)
[1.02090721 1.02763091 1.03899317 1.00630297 1.00127454 0.89916715 1.04486896]

If you want to change the printout of every array, not just here, see set_printoptions.

abarnert
  • 354,177
  • 51
  • 601
  • 671
  • 1
    Or the generalized version: [`array2string`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.array2string.html#numpy.array2string). But it's by default a bit closer to the `repr`. – MSeifert Mar 22 '18 at 20:39
  • ofc it doesnt work for multi dimensional array, because why would it ? I sure downloaded numpy just to use it on 1D array, the fact that a simple print function doesnt work speaks volumes on the quality of this lib –  Jun 02 '21 at 12:01
3

Type cast to a list when printing.

import numpy as np
a=np.array([ 1.02090721,  1.02763091,  1.03899317,  1.00630297,  1.00127454, 0.89916715,  1.04486896])
print(list(a))

This will print on a single line.

zerocool
  • 308
  • 1
  • 10