如何使用numpy不同的数据格式保存文本?

时间:2015-03-26 06:14:43

标签: python arrays numpy

我正在尝试按列显示列表A和数组B,如下所示:

输入

A = ['A', 'B', 'C']

B = [[ 1  2  3  4  5  6]
     [ 6  7  8  9 10 11]
     [11 12 13 14 15 16]]

文字格式的理想输出

A   1   2   3   4   5    6
B   6   7   8   9   10   11
C   11  12  13  14  15   16

但是当我使用这段代码时:

import numpy as np
A = ['A', 'B', 'C']
B = np.array([[1, 2, 3, 4, 5, 6], [6, 7, 8, 9, 10, 11], [11, 12, 13, 14, 15, 16]])
C = np.column_stack((A, B))
print (C)

我得到了这个输出:

[['A' '1' '2' '3' '4' '5' '6']
 ['B' '6' '7' '8' '9' '1' '1']
 ['C' '1' '1' '1' '1' '1' '1']]

为什么只输出一位数?

如何使用混合格式的numpy来保存文本,为此我尝试了:

np.savetxt('test.txt', np.column_stack((A, B)),  fmt='%s %0.2f')

但这会导致错误。如何在文本文件中获得所需的输出?

2 个答案:

答案 0 :(得分:0)

我有同样的问题np.__version__是1.8.1。我认为这是np.column_stacknp.concatenate的错误实现。确切地说。

您可以先使用Bastype转换为字符串类型:

In [49]: C = np.column_stack((A, B.astype('S')))

In [50]: C
Out[50]: 
array([['A', '1', '2', '3', '4', '5', '6'],
       ['B', '6', '7', '8', '9', '10', '11'],
       ['C', '11', '12', '13', '14', '15', '16']], 
      dtype='|S24')

In [5]: np.concatenate((A, B[2]))
Out[5]: 
array(['A', 'B', 'C', '1', '1', '1', '1', '1', '1'], 
      dtype='<U1')

编辑:

更新我的numpy包后,该问题就消失了:

In [3]: np.__version__
Out[3]: '1.9.2'

In [4]: C = np.column_stack((A, B))
   ...: print (C)
[['A' '1' '2' '3' '4' '5' '6']
 ['B' '6' '7' '8' '9' '10' '11']
 ['C' '11' '12' '13' '14' '15' '16']]

In [9]: np.concatenate((A, B[2]))
Out[9]: 
array(['A', 'B', 'C', '11', '12', '13', '14', '15', '16'], 
      dtype='|S11')

答案 1 :(得分:0)

由于concatenate函数,np.column_stack使用它来连接数组:

来源np.column_stack

arrays = []
for v in tup:
    arr = array(v, copy=False, subok=True)
    if arr.ndim < 2:
        arr = array(arr, copy=False, subok=True, ndmin=2).T
    arrays.append(arr)
return _nx.concatenate(arrays, 1)

演示:

>>> np.concatenate((A,B[2]))
array(['A', 'B', 'C', '1', '1', '1', '1', '1', '1'], 
      dtype='|S1')
>>> A = ['AA', 'BB', 'CC']
>>> np.concatenate((A,B[2]))
array(['AA', 'BB', 'CC', '11', '12', '13', '14', '15', '16'], 
      dtype='|S2')