@ -67,12 +67,39 @@ def vector_str(M, fmt="%22.15g", V=False, prefix="", suffix=""):
else :
else :
return prefix + " " . join ( [ fmt % m for m in M ] ) + suffix
return prefix + " " . join ( [ fmt % m for m in M ] ) + suffix
def matrix_str ( M , fmt = " %22.15g " , prefix = " " , suffix = " " ) :
def matrix_str ( M , fmt = None , prefix = " " , suffix = " " ) :
""" Prints a matrix in a textual format.
Applicable for integer , float , and complex 2 - D arrays .
COMPLEX NUMBER SUPPORT
By default , we print in full precision and in python - friendly format , like :
( + 3.200000000000000e+00 + 4.700000000000000e+00 j )
To print in C + + and Fortran friendly format , use :
>> > A_str = text_tools . matrix_str ( A , ' ( %+#22.15e , %+#22.15e ) ' )
The resulting output will be :
( + 3.200000000000000e+00 , + 4.700000000000000e+00 )
"""
linesep = suffix + " \n " + prefix
linesep = suffix + " \n " + prefix
if isinstance ( M , numpy . matrix ) :
if isinstance ( M , numpy . matrix ) :
M = numpy . asarray ( M )
M = numpy . asarray ( M )
elif not isinstance ( M , numpy . ndarray ) :
M = numpy . asarray ( M )
if len ( M . shape ) != 2 :
if len ( M . shape ) != 2 :
raise ValueError , " Wrong shape: expecting a two-dimensional array. "
raise ValueError , " Wrong shape: expecting a two-dimensional array. "
if numpy . iscomplex ( M [ 0 , 0 ] ) :
if fmt is None :
fmt = " ( %+22.15e %+22.15e j) "
mkfmt = lambda z : fmt % ( z . real , z . imag )
return prefix + linesep . join ( [ " " . join ( [ mkfmt ( c ) for c in R ] ) for R in M ] ) + suffix
else :
if fmt is None :
fmt = " %22.15g "
return prefix + linesep . join ( [ " " . join ( [ fmt % c for c in R ] ) for R in M ] ) + suffix
return prefix + linesep . join ( [ " " . join ( [ fmt % c for c in R ] ) for R in M ] ) + suffix