Python Forum
Byte string catenation inefficient in 3.7?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Byte string catenation inefficient in 3.7?
#10
So Ive had a first step at using numpy. Code is below, Im sure its rather crude and any critique is very welcome.
The time 'signature' in terms of total run time for various n (to give a nxn image) is broadly similar to that for the Python2.7 char string catenation method.

https://gyazo.com/2df2fbef43953fa1c14831abbd63925c

The core code fragments are:
PX = np.zeros((size2, Size), dtype=(int,3))   # size2 is Size rounded up to mult of 4

for Y in range(0, XY[1]): # (BMPs are L to R from the bottom L row)
        for X in range(0, XY[0]):
            # dummy code to make square rainbow, as opposed to real contour data
            x = floor((255 * X)/XY[0])
            y = floor((255 * Y)/XY[1])

            (r,g,b) = [x, y, 128]   #Colour(data[x ,y])
            PX[X,Y] = (b,r,g)

# could probably be a 1 liner
vec = np.ravel(PX, order='C')
vec = [int(v) for v in vec]
vec = bytes(vec)
Here is the new code in full to build the pixel array (a bit messy because f logging & tracking info):
def BuildImage2(name, XY):
    # using numpy array
    global t01

    n0 = 0
    t00 = time.process_time()
    t01 = t00

    def delTime():
        global t01
        t02 = time.process_time()
        t = t02-t01
        t01 = t02
        return t
    
    
    chtName2 = path+'cht_'+name+'2.bmp'
    print("drawing "+chtName2)
    
    hdr = bmpHdr(XY)
    #print(hdr)

    # pretty sure theres a neater way to do this
    row_mod = (hdr['width']*hdr['colordepth']/8) % 4
    if row_mod == 0:
        pad = 0 
    else:
        pad = (4 - row_mod)
    size2 = Size+pad
    
    PX = np.zeros((size2, Size), dtype=(int,3))
    t02 = time.process_time()
    print("empty array tim: {0:.3f} secs".format(delTime()))
    
    for Y in range(0, XY[1]): # (BMPs are L to R from the bottom L row)
        for X in range(0, XY[0]):
            x = floor((255 * X)/XY[0])
            y = floor((255 * Y)/XY[1])
            (r,g,b) = [x, y, 128]   #Colour(data[x ,y])
            PX[X,Y] = (b,r,g)

        #if(0 == Y % 100 or Y == 0):
        #    print("{0:5d} time = {0:6.3f}".format(XY[0]-Y, delTime()))
                
    print("PX populated")
    print( PX.shape)
    t02 = time.process_time()
    print("poulated array tim: {0:.3f} secs".format(delTime()))

    vec = np.ravel(PX, order='C')
    print("PX ravelled, len={0}".format(len(vec)))
    print(type(vec[0]))
    print(vec[0:9])

    vec = [int(v) for v in vec]
    vec = bytes(vec)
    
    print("PX bytes, len={0}".format(len(vec)))
    print(type(vec[0]))
    print(vec[0:9])
    print("bytes array tim: {0:.3f} secs".format(delTime()))

    bmp_write(chtName2, hdr, vec)
Reply


Messages In This Thread
RE: Byte string catenation inefficient in 3.7? - by RMJFlack - Aug-16-2019, 08:34 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  pyreadstat write_sav inefficient mikisDeWitte 2 2,736 Jun-21-2021, 09:49 AM
Last Post: mikisDeWitte
  'utf-8' codec can't decode byte 0xe2 in position 122031: invalid continuation byte tienttt 12 11,514 Sep-18-2020, 10:10 PM
Last Post: tienttt
  'utf-8' codec can't decode byte 0xda in position 184: invalid continuation byte karkas 8 31,648 Feb-08-2020, 06:58 PM
Last Post: karkas
  First Byte of a string is missing while receiving data over TCP Socket shahrukh1987 3 4,230 Nov-20-2019, 10:34 AM
Last Post: shahrukh1987
  HELP: String of Zero's and One's to binary byte schwasskin 1 3,862 May-19-2019, 07:31 AM
Last Post: heiner55
  4 byte hex byte swap from binary file medievil 7 22,070 May-08-2018, 08:16 AM
Last Post: killerrex
  get the content of the byte as string ricardons 5 3,672 Mar-02-2018, 02:41 PM
Last Post: ricardons
  byte string Skaperen 5 3,830 Feb-04-2018, 08:58 AM
Last Post: Gribouillis
  byte string in python2 Skaperen 4 4,334 Nov-23-2017, 03:13 AM
Last Post: Skaperen
  Does Python 3.x have a built-in byte string compare function? Raptor88 2 16,396 Feb-18-2017, 10:44 AM
Last Post: Raptor88

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020