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 22:05:14 EDT 2022


On Tuesday, May 17, 2022 at 8:48:27 AM UTC+8, Dennis Lee Bieber wrote:
> On Mon, 16 May 2022 17:22:17 -0700 (PDT), "hongy... at gmail.com" 
> <hongy... at gmail.com> declaimed the following: 
> 
> 
> >
> >I tried with the repr() method as follows, but it doesn't give any output:
> I have no idea what 50% of those libraries are supposed to do, and am 
> not going to install them just to try out your posted code. If you really 
> want such help, post the MINIMUM example code the produces your problem. 
> 
> >a=str(strmat(lst)) 
> >a=re.sub(r"'","",a) 
> 
> Explain what you believe this operation is doing, show us the input and 
> the output. 
> 
> The best I can make out of that is that it is looking for single quote 
> characters within whatever "a" is, and replacing them with nothing. 
> Something much more understandable, without invoking a regular expression 
> library (especially when neither the search nor the replacement terms are 
> regular expressions) with simple string operations... 
> 
> stripped = "".join(quoted.split("'")) 

Thank you for your above trick. I tried with the following code snippet:

```
from fractions import Fraction

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

# For test:
b=[[0.0, -1.0, 0.0, 0.25], [1.0, 0.0, 0.0, 0.25], [0.0, 0.0, 1.0, 0.25], [0.0, 0.0, 0.0, 1.0]]  

a=str(strmat(b))
a1=stripped = "".join(a.split("'")) 
a=re.sub(r"'","",a)
#repr(a)
print("a1 = "+ a1)
print("a = "+ a)
```

As you can see, both methods give the same results:

```
a1 = [[0, -1, 0, 1/4], [1, 0, 0, 1/4], [0, 0, 1, 1/4], [0, 0, 0, 1]]
a = [[0, -1, 0, 1/4], [1, 0, 0, 1/4], [0, 0, 1, 1/4], [0, 0, 0, 1]]
```

> You also don't need to specify RAW format for the "'" -- Python is quite 
> happy mixing single and double quotes (that is: single quotes inside a 
> string using double quotes, double quotes inside a string using single 
> quotes, either inside strings using triply quoted delimiters) 
> 
> >>> "'" 
> "'" 
> >>> '"' 
> '"' 
> >>> """'"'""" 
> '\'"\'' 
> >>> '''"'"''' 
> '"\'"' 
> >>> 
> 
> (Note that the interactive console displays results using repr(), and hence 
> escapes ' that are internal to avoid conflict with the ones wrapping the 
> output) 
> 
> >>> repr('''"'"''') 
> '\'"\\\'"\'' 
> >>> str('''"'"''') 
> '"\'"' 
> >>> print('''"'"''') 
> "'" 
> >>> 
> 
> The print() operation does not wrap the output with extraneous quotes.

Thank your insightful explanation.

Regards,
HZ

> -- 
> Wulfraed Dennis Lee Bieber AF6VN 
> wlf... at ix.netcom.com http://wlfraed.microdiversity.freeddns.org/


More information about the Python-list mailing list