deeppsycoder
@deeppsycoder
клинический психолог

Как задать строковый dtype при использовании метода apply_along_axis или более удачно представить массив в строкой?

Нужно представить массив в виде строки с заданными разделителями элементов. Наткнулся на такое поведение следующего кода.

>>> 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 и затем в массив (что мне в итоге и нужно).

В общем, задача решена, но вопрос остался.
  • Вопрос задан
  • 19 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы