如何从python中的矩阵中删除逗号等

时间:2010-05-30 02:50:08

标签: python matrix

说我有一个看起来像的矩阵:

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

我怎样才能在单独的行上制作它:

[[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]

然后删除逗号等:

0 0 0 0 0

并且还要将其设为空白而不是0,以便数字可以放入以后,所以最后它会像:

_ 1 2 _ 1 _ 1

(空格不是下划线)

感谢

6 个答案:

答案 0 :(得分:4)

这为矩阵中的每个数字分配4个空格。您可能需要根据您的数据进行调整。

这也使用了Python 2.6中引入的string format method。问你是否想看看如何以旧方式去做。

matrix=[[0, 1, 2, 0, 0], [0, 1, 0, 0, 0], [20, 0, 0, 0, 1]]
for row in matrix:
    data=(str(num) if num else ' ' for num in row])   # This changes 0 to a space
    print(' '.join(['{0:4}'.format(elt) for elt in data]))

产量

     1    2             
     1                  
20                  1   

答案 1 :(得分:3)

这是〜untubu答案的缩短版

M = [[0, 1, 2, 0, 0], [0, 1, 0, 0, 0], [20, 0, 0, 0, 1]]
for row in M:
    print " ".join('{0:4}'.format(i or " ") for i in row)

答案 2 :(得分:1)

#!/usr/bin/env python

m = [[80, 0, 3, 20, 2], [0, 2, 101, 0, 6], [0, 72 ,0, 0, 20]]

def prettify(m):
    for r in m:
        print ' '.join(map(lambda e: '%4s' % e, r)).replace(" 0 ", "   ")

prettify(m)

# => prints ...
# 80         3   20    2
#       2  101         6
#      72             20

答案 3 :(得分:1)

这个答案还计算了适当的字段长度,而不是猜测4:)

def pretty_print(matrix):
  matrix = [[str(x) if x else "" for x in row] for row in matrix]
  field_length = max(len(x) for row in matrix for x in row)
  return "\n".join(" ".join("%%%ds" % field_length % x for x in row)
                   for row in matrix)

这里有一个迭代太多,所以如果在关键时刻你需要在单个非功能循环中进行初始str()传递和field_length计算。

>>> matrix=[[0, 1, 2, 0, 0], [0, 1, 0, 0, 0], [20, 1, 1, 1, 0.30314]]
>>> print pretty_print(matrix)
              1       2                
              1                        
     20       1       1       1 0.30314
>>> matrix=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
>>> print pretty_print(matrix)
1    
  1  
    1

答案 4 :(得分:0)

def matrix_to_string(matrix, col):
        lines = []
        for e in matrix:
            lines.append(str(["{0:>{1}}".format(str(x), col) for x in e])[1:-1].replace(',','').replace('\'',''))
        pattern = re.compile(r'\b0\b')
        lines = [re.sub(pattern, ' ', e) for e in lines]
        return '\n'.join(lines)

示例:

matrix = [[0,1,0,3],[1,2,3,4],[10,20,30,40]]
print(matrix_to_string(matrix, 2))

输出:

    1     3
 1  2  3  4
10 20 30 40

答案 5 :(得分:0)

如果您对矩阵做了很多工作,我强烈建议使用numpy(第三方包)矩阵。它具有很多与迭代相关的功能(例如,标量乘法和矩阵加法)。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html

然后,如果你想让“print”输出你的特定格式,只需继承numpy的矩阵,并将repr和str方法替换为其他人提供的一些解决方案。

class MyMatrix(numpy.matrix):
   def __repr__(self):
      repr = numpy.matrix.__repr__(self)

      ...

      return pretty_repr

   __str__ = __repr__