如何使用文本标题很好地打印numpy矩阵-python [英] How to print numpy matrix nicely with text headers - python

查看:116
本文介绍了如何使用文本标题很好地打印numpy矩阵-python的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对python有疑问:

I have a question on python:

如何用这样的标题很好地打印矩阵:

how can I print matrix nicely with headers like this:

      T  C  G  C  A
  [0 -2 -4 -6 -8 -10]
T [-2  1 -1 -3 -5 -7]
C [-4 -1  2  0 -2 -4]
C [-6 -3  0  1  1 -1]
A [-8 -5 -2 -1  0  2]

我正在使用numpy.matrix(mat)打印三合会 但是我所拥有的只是:

I'v triad to print with numpy.matrix(mat) But all I'v got was:

[[  0  -2  -4  -6  -8 -10]
 [ -2   1  -1  -3  -5  -7]
 [ -4  -1   2   0  -2  -4]
 [ -6  -3   0   1   1  -1]
 [ -8  -5  -2  -1   0   2]]

我也没有成功添加标题.

And I also didn't succeed to add the headers.

谢谢!

谢谢大家. 我已经成功安装了pandas',但有2个新问题. 这是我的代码:

Thank you all. I'v succeed to install pandas' but I have 2 new problems. here is my code:

import pandas as pd
col1 = [' ', 'T', 'C', 'G', 'C', 'A']
col2 = [' ', 'T', 'C', 'C', 'A']
df = pd.DataFrame(mat,index = col2, columns = col1)
print df

但是我得到这个错误:

    df = pd.DataFrame(mat,index = col2, columns = col1)
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 163, in __init__
    copy=copy)
  File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 224, in _init_ndarray
    return BlockManager([block], [columns, index])
  File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 237, in __init__
    self._verify_integrity()
  File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 313, in _verify_integrity
    union_items = _union_block_items(self.blocks)
  File "C:\Python27\lib\site-packages\pandas\core\internals.py", line 906, in _union_block_items
    raise Exception('item names overlap')
Exception: item names overlap

当我尝试更改字母时,它会起作用:

And when I am trying to change the letters it works:

       T   B   G   C   A  
   0   -2  -4  -6  -8  -10
T  -2  1   -1  -3  -5  -7 
C  -4  -1  2   0   -2  -4 
C  -6  -3  0   1   1   -1 
A  -8  -5  -2  -1  0   2  

但是您可以看到矩阵的布局不是很好. 我该如何解决这些问题?

but as you can see the layout of the matrix is not quite well. How can I fix those problems?

推荐答案

Numpy不提供此类功能.

Numpy does not provide such a functionality out of the box.

您可能会看熊猫.打印pandas.DataFrame通常看起来很不错.

You may look into pandas. Printing a pandas.DataFrame usually looks quite nice.

import numpy as np
import pandas as pd
cols = ["T", "C", "S", "W", "Q"]
a = np.random.randint(0,11,size=(5,5))
df = pd.DataFrame(a, columns=cols, index=cols)
print df

会产生

   T  C   S  W  Q
T  9  5  10  0  0
C  3  8   0  7  2
S  0  2   6  5  8
W  4  4  10  1  5
Q  3  8   7  1  4

(b)纯python

如果只有纯python可用,则可以使用以下函数.

(b) pure python

If you only have pure python available, you can use the following function.

import numpy as np

def print_array(a, cols, rows):
    if (len(cols) != a.shape[1]) or (len(rows) != a.shape[0]):
        print "Shapes do not match"
        return
    s = a.__repr__()
    s = s.split("array(")[1]
    s = s.replace("      ", "")
    s = s.replace("[[", " [")
    s = s.replace("]])", "]")
    pos = [i for i, ltr in enumerate(s.splitlines()[0]) if ltr == ","]
    pos[-1] = pos[-1]-1
    empty = " " * len(s.splitlines()[0])
    s = s.replace("],", "]")
    s = s.replace(",", "")
    lines = []
    for i, l in enumerate(s.splitlines()):
        lines.append(rows[i] + l)
    s  ="\n".join(lines)
    empty = list(empty)
    for i, p in enumerate(pos):
        empty[p-i] = cols[i]
    s = "".join(empty) + "\n" + s
    print s



c = [" ", "T", "C", "G", "C", "A"]
r = [" ", "T", "C", "C", "A" ]
a = np.random.randint(-4,15,size=(5,6))    
print_array(a, c, r)

给你

       T  C  G  C  A      
  [ 2  5 -3  7  1  9]
T [-3 10  3 -4  8  3]
C [ 6 11 -2  2  5  1]
C [ 4  6 14 11 10  0]
A [11 -4 -3 -4 14 14]

这篇关于如何使用文本标题很好地打印numpy矩阵-python的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆