While using scipy/numpy, I do get information that I store into a numpy.ndarray
>>> a
array([[ 0.15555605, 0.51031528, 0.84580176, 0.06722675],
[ 0.60556045, 0.62721023, -0.48979983, -0.04152777],
[-0.78044785, 0.58837543, -0.21146041, -0.13568023],
[ 0. , 0. , 0. , 1. ]])
>>> print(a)
[[ 0.15555605 0.51031528 0.84580176 0.06722675]
[ 0.60556045 0.62721023 -0.48979983 -0.04152777]
[-0.78044785 0.58837543 -0.21146041 -0.13568023]
[ 0. 0. 0. 1. ]]
How can I print the result on a single line?
I already checked:
>>> numpy.get_printoptions()
{'precision': 8, 'threshold': 1000, 'edgeitems': 3, 'linewidth': 75, 'suppress': False, 'nanstr': 'nan', 'infstr': 'inf', 'formatter': None}
But even setting linewidth
to 1000 does no change this. Is there a way to change the displayed format of that type?
Is it also possible to add comma in between each number (like the array display but without the surrounding array(...)
)?
In order to print a numpy.array
into a single line, you can convert it to a list with its built-in function numpy.tolist()
Example:
import numpy as np
arr = np.array(((1, 2, 3), (4, 5, 6), (7, 8, 9)))
Simple print of array:
print(arr)
[[1, 2, 3]
[4, 5, 6]
[7, 8, 9]]
In comparison with numpy.tolist()
:
print(array.tolist())
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
NumPy provides a few ways to customize the printing, for example np.array2string
.
For this answer I assume you have such an array:
>>> import numpy as np
... arr = np.array([[ 0.15555605, 0.51031528, 0.84580176, 0.06722675],
... [ 0.60556045, 0.62721023, -0.48979983, -0.04152777],
... [-0.78044785, 0.58837543, -0.21146041, -0.13568023],
... [ 0. , 0. , 0. , 1. ]])
threshold
to np.inf
. ,
as separator, you can set separator
to ','
. However it doesn't have an option to remove the line breaks, just
max_line_width
which gives the number of characters printed in one line for the innermost dimension. So it works for 1D arrays when you set max_line_width=np.inf
but it doesn't work out of the box for ND arrays. Fortunately it returns a string that can be manipulated, for example by removing all linebreaks:
>>> np.array2string(arr, threshold=np.inf, max_line_width=np.inf, separator=',').replace('\n', '')
'[[ 0.15555605, 0.51031528, 0.84580176, 0.06722675], [ 0.60556045, 0.62721023,-0.48979983,-0.04152777], [-0.78044785, 0.58837543,-0.21146041,-0.13568023], [ 0. , 0. , 0. , 1. ]]'
Or use a regular expression to remove all whitespaces:
>>> import re
>>> re.sub(r'\s+', '', np.array2string(arr, threshold=np.inf, max_line_width=np.inf, separator=','))
'[[0.15555605,0.51031528,0.84580176,0.06722675],[0.60556045,0.62721023,-0.48979983,-0.04152777],[-0.78044785,0.58837543,-0.21146041,-0.13568023],[0.,0.,0.,1.]]'
Agreed these aren't really "short" and they are also slower than converting to a list
with .tolist()
and then to a string but it's probably a good alternative especially if you want to customize the printed result without creating a (potentially huge) unnecessary list.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.