我正在尝试按列显示列表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')
但这会导致错误。如何在文本文件中获得所需的输出?
答案 0 :(得分:0)
我有同样的问题np.__version__
是1.8.1。我认为这是np.column_stack
或np.concatenate
的错误实现。确切地说。
您可以先使用B
将astype
转换为字符串类型:
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
使用它来连接数组:
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')