Send a multidimensional numpy array over a socket

前端 未结 3 1655
萌比男神i
萌比男神i 2021-02-13 21:23

Good day,

I\'ve searched for this but haven\'t come up with any responses. I wish to send a multi dimensional numpy array over a socket. Hence, I decided to convert it t

3条回答
  •  有刺的猬
    2021-02-13 21:47

    This is a slightly improvised answer for ajsp answer using XML-RPC.

    On the server-side when you convert the data, convert the numpy data to a string using the '.tostring()' method. This encodes the numpy ndarray as bytes string. On the client-side when you receive the data decode it using '.fromstring()' method. I wrote two simple functions for this. Hope this is helpful.

    1. ndarray2str -- Converts numpy ndarray to bytes string.
    2. str2ndarray -- Converts binary str back to numpy ndarray.
        def ndarray2str(a):
            # Convert the numpy array to string 
            a = a.tostring()
    
            return a
    

    On the receiver side, the data is received as a 'xmlrpc.client.Binary' object. You need to access the data using '.data'.

        def str2ndarray(a):
            # Specify your data type, mine is numpy float64 type, so I am specifying it as np.float64
            a = np.fromstring(a.data, dtype=np.float64)
            a = np.reshape(a, new_shape)
    
            return a
    

    Note: Only problem with this approach is that XML-RPC is very slow while sending large numpy arrays. It took me around 4 secs to send and receive a (10, 500, 500, 3) size numpy array for me.

    I am using python 3.7.4.

提交回复
热议问题