如何打印没有括号的Numpy数组?

Fra*_*ter 29 python numpy

我想转换a = [1,2,3,4,5]a_string = "1 2 3 4 5".真正的numpy数组相当大(50000x200)所以我认为使用for loops太慢了.

tit*_*ito 44

您可以使用join字符串中的方法:

>>> a = [1,2,3,4,5]
>>> ' '.join(map(str, a))
"1 2 3 4 5"
Run Code Online (Sandbox Code Playgroud)

  • 一个更简单的变体(恕我直言)将使用迭代器:`''.join(str(n)for a in a) (4认同)

Cir*_*四事件 14

np.savetxt

Python 3(另见):

import numpy as np
import sys

a = np.array([0.0, 1.0, 2.0, 3.0])
np.savetxt(sys.stdout.buffer, a)
Run Code Online (Sandbox Code Playgroud)

Python 2:

import numpy as np
import sys

a = np.array([0.0, 1.0, 2.0, 3.0])
np.savetxt(sys.stdout, a)
Run Code Online (Sandbox Code Playgroud)

输出:

0.000000000000000000e+00
1.000000000000000000e+00
2.000000000000000000e+00
3.000000000000000000e+00
Run Code Online (Sandbox Code Playgroud)

控制预设

用途fmt:

np.savetxt(sys.stdout, a, fmt="%.3f")
Run Code Online (Sandbox Code Playgroud)

输出:

0.000
1.000
2.000
3.000 
Run Code Online (Sandbox Code Playgroud)

要么:

np.savetxt(sys.stdout, a, fmt="%i")
Run Code Online (Sandbox Code Playgroud)

输出:

0
1
2
3
Run Code Online (Sandbox Code Playgroud)

获取字符串而不是打印

Python 3:

import io
bio = io.BytesIO()
np.savetxt(bio, a)
mystr = bio.getvalue().decode('latin1')
print(mystr, end='')
Run Code Online (Sandbox Code Playgroud)

我们使用latin1是因为文档告诉我们它是使用的默认编码.

Python 2:

import StringIO
sio = StringIO.StringIO()
np.savetxt(sio, a)
mystr = sio.getvalue()
print mystr
Run Code Online (Sandbox Code Playgroud)

全部在一条线上

或者,如果你真的想要一行:

a = np.array([0.0, 1.0, 2.0, 3.0])
np.savetxt(sys.stdout, a, newline=' ')
print()
Run Code Online (Sandbox Code Playgroud)

输出:

0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 
Run Code Online (Sandbox Code Playgroud)

TODO:有一个尾随空间.我看到的唯一解决方案是保存为字符串和条带.

在Python 2.7.15rc1和Python 3.6.6上测试,numpy 1.13.3


小智 9

也许有点hacky,但我只是在使用后将它们切掉np.array2string

import numpy as np

a = np.arange(0,10)
a_str = np.array2string(a, precision=2, separator=', ')
print(a_str[1:-1])
Run Code Online (Sandbox Code Playgroud)

结果:

    0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Run Code Online (Sandbox Code Playgroud)

np.array2string 也有很多选项,因此您可以设置列宽,这对处理大量数据非常有用:

a = np.arange(0,15)
a_str = np.array2string(a, precision=2, separator=', ', max_line_width=15)
print(' ' + a_str[1:-1])
Run Code Online (Sandbox Code Playgroud)

给出:

       0,  1,  2,
       3,  4,  5,
       6,  7,  8,
       9, 10, 11,
      12, 13, 14
Run Code Online (Sandbox Code Playgroud)

它会在数组元素上巧妙地拆分。请注意附加到字符串开头的空格以说明在删除初始括号后对齐第一行。


Lor*_*ton 5

如果您有一个numpy 数组而不是一个列表(因为您在帖子中提到了“真正的 numpy 数组”),您可以re.sub在数组的字符串表示中使用:

print(re.sub('[\[\]]', '', np.array_str(a)))
Run Code Online (Sandbox Code Playgroud)

同样,这是假设您的a数组在某个时候是一个 numpy 数组。这也具有处理矩阵的优点。