Python 3.x Python打印对齐numpy数组

Python 3.x Python打印对齐numpy数组,python-3.x,numpy,Python 3.x,Numpy,当我通过以下方式打印numpy阵列时: print('Array: ', A) 结果格式不正确: Array: [[0.0000 0.5000] [0.0000 0.3996]] 相反,我希望“正确”对齐: Array: [[0.0000 0.5000] [0.0000 0.3996]] 复制自: 但请参考Andy p的回复,注意,您也可以不使用标签打印所有内容 这段代码本质上是scoffey上述代码的一个实现,但它没有三个字符的限制,而且功能更强大。 这是我的密码:

当我通过以下方式打印numpy阵列时:

print('Array: ', A)
结果格式不正确:

Array: [[0.0000 0.5000]
 [0.0000 0.3996]]
相反,我希望“正确”对齐:

Array: [[0.0000 0.5000]
        [0.0000 0.3996]]
复制自:

但请参考Andy p的回复,注意,您也可以不使用标签打印所有内容

这段代码本质上是scoffey上述代码的一个实现,但它没有三个字符的限制,而且功能更强大。 这是我的密码:

    def format__1(digits,num):
        if digits<len(str(num)):
            raise Exception("digits<len(str(num))")
        return ' '*(digits-len(str(num))) + str(num)
    def printmat(arr,row_labels=[], col_labels=[]): #print a 2d numpy array (maybe) or nested list
        max_chars = max([len(str(item)) for item in flattenList(arr)+col_labels]) #the maximum number of chars required to display any item in list
        if row_labels==[] and col_labels==[]:
            for row in arr:
                print '[%s]' %(' '.join(format__1(max_chars,i) for i in row))
        elif row_labels!=[] and col_labels!=[]:
            rw = max([len(str(item)) for item in row_labels]) #max char width of row__labels
            print '%s %s' % (' '*(rw+1), ' '.join(format__1(max_chars,i) for i in col_labels))
            for row_label, row in zip(row_labels, arr):
                print '%s [%s]' % (format__1(rw,row_label), ' '.join(format__1(max_chars,i) for i in row))
        else:
            raise Exception("This case is not implemented...either both row_labels and col_labels must be given or neither.")
给予


如果“x”只是一个嵌套的python列表而不是一个numpy数组,则这也是输出。

改善显示效果的最简单方法是将标签和数组打印分开:

In [13]: print('Array:');print(np.arange(4).reshape(2,2))
Array:
[[0 1]
 [2 3]]

打印将字符串与数组的
str
格式相结合:

In [15]: print('Array', str(np.arange(4).reshape(2,2)))
Array [[0 1]
 [2 3]]
In [16]: str(np.arange(4).reshape(2,2))
Out[16]: '[[0 1]\n [2 3]]'
str(A)
是独立于较大的上下文来完成的,因此只需要小缩进,而不是您想要的大缩进

为了更接近您想要的结果,您必须自己拆分和组合这些字符串


生产相同产品的变体:

In [19]: print('Array\n{}'.format(np.arange(4).reshape(2,2)))
Array
[[0 1]
 [2 3]]

In [22]: print('Array',np.arange(4).reshape(2,2),sep='\n')
Array
[[0 1]
 [2 3]]

以下是我对拆分和重建的想法:

In [26]: alist = str(np.arange(6).reshape(3,2)).splitlines()
In [27]: alist
Out[27]: ['[[0 1]', ' [2 3]', ' [4 5]]']
In [28]: header = 'Array: '; offset = '       '
In [29]: astr = [header + alist[0]]
In [30]: for row in alist[1:]:
    ...:     astr.append(offset + row)
    ...:     
In [31]: astr
Out[31]: ['Array: [[0 1]', '        [2 3]', '        [4 5]]']
In [32]: print('\n'.join(astr))
Array: [[0 1]
        [2 3]
        [4 5]]

NumPy提供了以下功能:

像这样使用它来指定前缀(长度):

打印('Array:',np.array2string(A,前缀='Array:')) 数组:[[0.0.5] [0. 0.3996]] 要了解此函数的作用,请仅查看其输出:

打印(np.array2string(A,prefix='Array:')) [[0. 0.5 ] [0. 0.3996]]
因此,它只是在第一行后面缩进前缀的长度。前缀本身未打印。

请注意,如果您想要标签,则需要同时使用列和行标签。其中只有一个不起作用
In [15]: print('Array', str(np.arange(4).reshape(2,2)))
Array [[0 1]
 [2 3]]
In [16]: str(np.arange(4).reshape(2,2))
Out[16]: '[[0 1]\n [2 3]]'
In [19]: print('Array\n{}'.format(np.arange(4).reshape(2,2)))
Array
[[0 1]
 [2 3]]

In [22]: print('Array',np.arange(4).reshape(2,2),sep='\n')
Array
[[0 1]
 [2 3]]
In [26]: alist = str(np.arange(6).reshape(3,2)).splitlines()
In [27]: alist
Out[27]: ['[[0 1]', ' [2 3]', ' [4 5]]']
In [28]: header = 'Array: '; offset = '       '
In [29]: astr = [header + alist[0]]
In [30]: for row in alist[1:]:
    ...:     astr.append(offset + row)
    ...:     
In [31]: astr
Out[31]: ['Array: [[0 1]', '        [2 3]', '        [4 5]]']
In [32]: print('\n'.join(astr))
Array: [[0 1]
        [2 3]
        [4 5]]