numpy 数组元素之间的间距不一致

lor*_*ine -1 python numpy

在python中,当我说np.array([1,2,3])时,结果是

array([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

但是当我说np.array([11,22,3])时结果是

array([11, 22,  3]) 
Run Code Online (Sandbox Code Playgroud)

'3' 前面有两个空格,而 '22' 前面有一个空格。后来我使用 Map 函数使用 Pandas 从 CSV 文件中读取此结果

appended_data.append({'array': numpyarray})
OutputDataFrame = pd.DataFrame(appended_data).ix[:, columns]
OutputDataFrame.to_csv('name.csv', index=False)
Run Code Online (Sandbox Code Playgroud)

我需要间距保持一致。有什么办法可以做到吗?

hpa*_*ulj 5

数组的默认显示是每个元素的统一字段宽度,而不是统一的间距:

In [30]: x=np.array([11,223,3])

In [31]: x
Out[31]: array([ 11, 223,   3])

In [32]: x.tolist()      # list display with uniform spacing
Out[32]: [11, 223, 3]
Run Code Online (Sandbox Code Playgroud)

实际上numpy使用如下格式:

In [35]: fmt = '  '.join(['%3d','%3d','%3d'])

In [36]: fmt
Out[36]: '%3d  %3d  %3d'

In [37]: fmt%tuple(x)
Out[37]: ' 11  223    3'
Run Code Online (Sandbox Code Playgroud)

np.savetxt使用您提供的fmt和就可以做到这一点。delimiter

csv代表“逗号分隔”。也使用标签。如果使用“空白”,优秀的读者也会对一个、两个或更多“空白”感到满意。此类表的格式通常是为了保持列对齐,而不是保持数字之间的间距恒定。

具有混合数字大小的 3 行数组:

In [39]: x=np.array([[1,123,32],[34,1,2],[0,23,1000]])

In [40]: x
Out[40]: 
array([[   1,  123,   32],
       [  34,    1,    2],
       [   0,   23, 1000]])
Run Code Online (Sandbox Code Playgroud)

固定宽度 csv 格式:

In [41]: np.savetxt('test.csv',x,fmt='%5d', delimiter=',')

In [42]: cat test.csv
    1,  123,   32
   34,    1,    2
    0,   23, 1000
Run Code Online (Sandbox Code Playgroud)

定界阅读:

In [43]: np.genfromtxt('test.csv',delimiter=',',dtype=None)
Out[43]: 
array([[   1,  123,   32],
       [  34,    1,    2],
       [   0,   23, 1000]])
Run Code Online (Sandbox Code Playgroud)

Python 字符串分割的默认模式使用通用空格:

In [44]: ' 11  223    3'.split()
Out[44]: ['11', '223', '3']
Run Code Online (Sandbox Code Playgroud)

这是一个具有恒定间距(和可变宽度)的 csv 示例

In [45]: np.savetxt('test.csv',x,fmt='%d', delimiter=' ')

In [46]: cat test.csv
1 123 32
34 1 2
0 23 1000
Run Code Online (Sandbox Code Playgroud)

np.genfromtxt('test.csv',dtype=None)读起来很好。