I am trying to concatenate the bytes of multiple Numpy arrays into a single bytearray
to send it in an HTTP post request.
The most efficient way of doing this, that I can think of, is to create a sufficiently large bytearray
object and then write into it the bytes from all the numpy arrays contiguously.
The code will look something like this:
list_arr = [np.array([1, 2, 3]), np.array([4, 5, 6])]
total_nb_bytes = sum(a.nbytes for a in list_arr)
cb = bytearray(total_nb_bytes)
# Too Lazy Didn't do: generate list of delimiters and information to decode the concatenated bytes array
# concatenate the bytes
for arr in list_arr:
_bytes = arr.tobytes()
cb.extend(_bytes)
The method tobytes()
isn't a zero-copy method. It will copy the raw data of the numpy array into a bytes
object.
In python, buffers allow access to inner raw data value (this is called protocol buffer at the C level) Python documentation; numpy had this possibility in numpy1.13, the method was called getbuffer()
link. Yet, this method is deprecated!
What is the right way of doing this?