[PYTHON] Visualisiere N-ary

Motivation

Wäre es nicht lustig, die N-ary-Notation zu einem Graustufenbild zu machen? ?? ??

Implementierung


import numpy as np
import math
from tqdm import tqdm
from PIL import Image

Konvertieren Sie x in k-stellige N-ary und geben Sie sie als numpy.array aus (ex. x=10,n=2,k=8 → 00001010)


def int__n(x,n,k):
    if x>(n**k-1):
#       print("x over maximum\n","x=",x," n**k-1=",n**k-1)
#       print("n=",n," k=",k)
        return np.full(k,n-1)
    else:
        a = x%(n**(k-1))
        b = x//(n**(k-1))
        if k==1:
            return np.array([b])
        else:
            v = int__n(a,n,k-1)
            return np.insert(v,0,b,axis=0)

Ersetzen Sie int__n durch eine natürliche Zahl kleiner oder gleich k und kombinieren Sie sie


def mk_matrix(k,base):  # k:Größenbasis:radix
    c = int(math.log(k,base)+2)
    m = np.full((0,c),0)
    for i in range(k):
        v = int__n(i+1,base,c)
        m = np.insert(m,i,v,axis=0)
    return m

Konvertieren Sie von numpy.array in PIL.Image (Imaging)


def mk_img(x,base):
    M = np.uint8((255/(base-1)*((base-1)-mk_matrix(x,base))))
#   Image.fromarray(M).convert("L").resize((x,x)).show()
    img = Image.fromarray(M).convert("L").resize((x,x))
    img.save("base{base}_for_{x}.png ".format(base=base,x=x))
    img.resize((500,500)).save("base{base}_for_{x}_resized_500x500.png ".format(base=base,x=x))

Erstellen Sie Bilder in 2 bis 20 Basen


for n in tqdm(range(2,21)):
    mk_img(2000,n)

Ergebnis

Binär base2_for_2000.png Fünf-System base5_for_2000.png 13 Jahre alt base13_for_2000.png 20 Jahre alt base20_for_2000.png

Impressionen

Nun, ich wusste, dass es nicht besonders lustig war. Ich frage mich, ob es eine Praxis für PIL und Numpy wurde ...

Recommended Posts

Visualisiere N-ary
Einschlussnotation
Formatnotation
Einschlussnotation