2015-07-15 3 views
0

Я разрабатываю приложение, которое обрабатывает некоторые медицинские данные изображения в Python (библиотеку nibabel) и отправляет данные на сервер обработки в Java (TCP-сокет), что намного быстрее, чем такая же реализация Python.Отправка полного вектора из клиента Python на сервер Java

В этом смысле, я пытаюсь отправить 3D матрицу (271x271x221) с Python на Java:

sock.sendall("Input " + str(input_matrix.flatten()).strip('[]') + "\n") 

Но проблема в том, что Python укорачивает матрицу Свести при заливке матрицы в строку, как и :

print input_matrix.flatten() 

    [12 12 12 ..., 12 12 12] 

Так сервер Java получает:

Server is open! 
Connection successful 
    Waiting for data... 
     Received: Input 12 12 12 ..., 12 12 12 

Таким образом, я могу не восстанавливать матрицу на сервере Java.

Как я могу отправить все данные без использования цикла (цикл будет очень медленным при обработке полной 3D-матрицы) в клиенте Python?

Спасибо заранее!

ответ

0

Вопрос заключается в том, что str на векторном типе nibabel пытается вмешаться и сократить результат, поскольку вектор огромен.

Ive не используется nibabel, но обычно функция repr не должна сокращать его - теперь nibabel может переопределить эту функцию для своего векторного класса.

Лучше, чтобы это не использовать str и не было, но чтобы создать свою собственную строку.

",".join(input_matrix.flatten()) дает вам целые векторы с запятыми между каждым элементом.

+0

Я пробовал это, но теперь я получаю еще одну ошибку, связанную с кастингом в '.join':' TypeError: элемент последовательности 0: ожидаемая строка, numpy.int16 found'. Как я могу это решить? Спасибо AJK! –

+0

','. Join (str (x) для x в input_matrix.flatten()) – AbdealiJK

+0

Спасибо! Последний работал очень хорошо. Кстати, есть ли эквивалентная строка в java? –

Смежные вопросы