发送多维数组numpy的通过套接字 [英] Send a multidimensional numpy array over a socket
问题描述
您好,
我搜索过这一点,但还没有拿出任何响应。我想通过套接字发送一个多维数组numpy的。因此,我决定把它转换为字符串:
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 to a string:
然而,它破坏了阵列的重新presentation:
However, it destroys the representation of the array:
>>> import numpy as np
>>> x = np.array([[0, 1], [2, 3]])
>>> xstring = x.tostring()
>>> print xstring
>>> print x
[[0 1]
[2 3]]
>>> print xstring
>>> nparr = np.fromstring(xstring, dtype=np.uint8)
>>> print nparr
[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0]
反正我有可以转换为字符串以某种方式,保存它的尺寸?
Is there anyway I can get the conversion to string to somehow, save the dimension of it?
推荐答案
试试这个例子: -
Try this example:-
import socket
import numpy as np
from cStringIO import StringIO
class numpysocket():
def __init__(self):
pass
@staticmethod
def startServer():
port=7555
server_socket=socket.socket()
server_socket.bind(('',port))
server_socket.listen(1)
print 'waiting for a connection...'
client_connection,client_address=server_socket.accept()
print 'connected to ',client_address[0]
ultimate_buffer=''
while True:
receiving_buffer = client_connection.recv(1024)
if not receiving_buffer: break
ultimate_buffer+= receiving_buffer
print '-',
final_image=np.load(StringIO(ultimate_buffer))['frame']
client_connection.close()
server_socket.close()
print '\nframe received'
return final_image
@staticmethod
def startClient(server_address,image):
if not isinstance(image,np.ndarray):
print 'not a valid numpy image'
return
client_socket=socket.socket()
port=7555
try:
client_socket.connect((server_address, port))
print 'Connected to %s on port %s' % (server_address, port)
except socket.error,e:
print 'Connection to %s on port %s failed: %s' % (server_address, port, e)
return
f = StringIO()
np.savez_compressed(f,frame=image)
f.seek(0)
out = f.read()
client_socket.sendall(out)
client_socket.shutdown(1)
client_socket.close()
print 'image sent'
pass
在这个模型中客户端发送多维ndarray服务器。
有两种功能的startserver()和startClient()。
startserver的不带任何参数,但startClient需要服务器的地址,以及该ndarray作为参数。
首先启动服务器,然后启动客户端。
服务器只接收客户端关机消息后,开始从缓冲区中读取。
In this model client sends multidimensional ndarray to server. There are two functions startServer() and startClient(). startServer takes no arguments but startClient needs server address as well as the ndarray as arguments. First start Server and then start client. Server starts reading from buffer only after receiving the shutdown message from client.
这篇关于发送多维数组numpy的通过套接字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!