2012-04-04 50 views
1

当复数浮点矩阵实际填充了实数或虚数时,这是很常见的情况。有时它们甚至是整数(但中间数字不是,并且无论如何不存在复杂的整数类型)。可能有一个聪明的解决方案,不用手工格式化所有的东西?复杂阵列的智能打印

举例:(尽可能接近到所需要的)组合

numpy.around(numpy.real_if_close(numpy.array([[1.0j,1.0],[0.0,1.0j]],complex))) 

我得到

array([[ 0.+1.j, -1.+0.j], 
     [ 0.+0.j, 0.+1.j]]) 

所需的输出是

array([[ 1j, -1 ], 
     [ 0 , 1j]]) 
+3

为什么你不只是子类numpy.array和覆盖内建__repr__函数? – 2012-04-04 05:58:50

+0

@Joel Cornett不确定我了解你的建议。这对我来说无论是“repr”函数还是外部函数都无关紧要。这个问题在这个打印过程中很难抑制零。背后的逻辑是显而易见的,但很罗嗦。 – Misha 2012-04-04 06:13:14

回答

3
>>> import numpy 
>>> a = numpy.around(numpy.real_if_close(numpy.array([[1.0j,0.0],[0.0,1.0j]],complex))) 
>>> a 
array([[ 0.+1.j, 0.+0.j], 
     [ 0.+0.j, 0.+1.j]]) 
>>> [[c if c.imag else c.real for c in b] for b in a] 
[[1j, 0.0], [0.0, 1j]] 

我不是肯定有内置的方式来做到这一点。

编辑:建议子类numpy的数组是一个很好的,这可能是最简单的方法。否则,你可以施放只要抓住一切从数组并把它放在一个列表,但像你想不打印0(它打印0J)

>>> [[c for c in b] for b in a] 
[[1j, 0j], [0j, 1j]] 
+0

如果我尝试打印矩阵[[1.j,1。],[0.,1.j],我会得到[[1j,(1 + 0j)],[0,1j]]。这不适用于负面因素。但是,使用打印功能本身的智能性是一个好主意。 – Misha 2012-04-04 06:07:47

+0

我刚刚意识到这有负面问题,我相信这个解决方案可以满足您的需求? – 2012-04-04 06:09:01