Convert the decimal numbers expressed in a `numpy.ndarray` into a matrix representing elements in fractional form

hongy...@gmail.com hongyi.zhao at gmail.com
Mon May 16 20:22:17 EDT 2022


On Monday, May 16, 2022 at 11:27:58 PM UTC+8, Dennis Lee Bieber wrote:
> On Mon, 16 May 2022 02:03:26 -0700 (PDT), "hongy... at gmail.com" 
> <hongy... at gmail.com> declaimed the following: 
> 
> 
> >print(lst) 
> 
> Printing higher level structures uses the repr() of the structure and 
> its contents -- theoretically a form that could be used within code as a 
> literal.

I tried with  the repr() method as follows, but it doesn't give any output:

```
import os,sys
import numpy as np
from fractions import Fraction
import re
from pymatgen.symmetry.analyzer import SpacegroupAnalyzer
from pymatgen.core import Lattice, Structure, Molecule, IStructure

def filepath(file):
   script_dirname=os.path.dirname(os.path.realpath(__file__))
   return (script_dirname + '/' + file)

s=IStructure.from_file(filepath('EntryWithCollCode136212.cif'))
a = SpacegroupAnalyzer(s)
SymOp=a.get_symmetry_operations()
b=SymOp[1].affine_matrix.tolist()

def strmat(m):
   if(np.array([m]).ndim==1):
      return str(Fraction(m))
   else: return list(map(lambda L:strmat(L), np.array(m)))

lst=[]
for i in SymOp:
   lst.append(i.affine_matrix.tolist())
   
a=str(strmat(lst))
a=re.sub(r"'","",a)
repr(a)
```

> If you want human-readable str() you will need to write your own 
> output loop to do the formatting of the structure, and explicitly print 
> each item of the structure. 
 



More information about the Python-list mailing list