Нужно представить массив в виде строки с заданными разделителями элементов. Наткнулся на такое поведение следующего кода.
>>> def array_to_string(array, sep):
>>> return f'{sep}'.join(map(str, array))
>>>
>>>
>>> a = np.arange(12).reshape((3, 4))
>>> np.apply_along_axis(array_to_string, 1, a, ',')
array(['0,1,2,3', '4,5,6,7', '8,9,10,'], dtype='<U7')
>>> a = np.arange(16).reshape((4, 4))
>>> np.apply_along_axis(array_to_string, 1, a, ',')
array(['0,1,2,3', '4,5,6,7', '8,9,10,', '12,13,1'], dtype='<U7')
>>> a = np.arange(9).reshape((3, 3))
>>> np.apply_along_axis(array_to_string, 1, a, ',')
array(['0,1,2', '3,4,5', '6,7,8'], dtype='<U5')
То есть, длина строки задаётся после обработки первого вектора, а если последующие получаются длиннее, то они обрезаются. Можно ли задать нужный тип результата?
С другой стороны, использование
apply_along_axis для этой цели - не лучшая идея. Есть функция
array2string с параметром
separator, хотя она всё равно не позволит, скажем, отделять элементы запятой, а строки точкой с запятой.
Пока наиболее удачным решением моей задачи, на мой взгляд, является использование метода
tolist с последующей конвертацией списка в строку, которую легко можно обратно преобразовать обратно в список с помощью функции
eval и затем в массив (что мне в итоге и нужно).
В общем, задача решена, но вопрос остался.