numpy.apply_along_axis обрезает строки, потому что выводит неверный dtype '<U1' - PullRequest
1 голос
/ 04 мая 2019

Я не знаю, как вернуть строку с dtype U3

Я хочу:

  1. apply_along_axis к my_array

  2. для каждой строки, вернуть строку

def my_function(x):
    return x[2]
my_array = np.array([[1,1,"A"],[1,1,"BBB"], [1,1,"CCC"]])
np.apply_along_axis(my_function, axis=1, arr=my_array)

Я ожидаю вывод: array(['A', 'BBB', 'CCC'], dtype='<U3') но фактический результат array(['A', 'B', 'C'], dtype='<U1')

поскольку первый элемент ('A') имеет фиксированный размер U1, все последующие элементы усекаются до U1 ('BBB' -> 'B').

Знаете ли вы, как изменить код на строку, например, с помощью dtype U3?

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Для этого конкретного случая использования вы можете использовать нарезку, то есть

my_array[:, 2]

и вообще избегать apply_along_axis.Но я согласен, что вывод типа из первого применения функции является проблематичным.Также существует проблема .

Кстати: числа в вашем массиве преобразуются в строки, но это приводит к неоптимальному типу <U21.Если вы сделаете их напрямую, вы получите <U3.

0 голосов
/ 04 мая 2019

попробуйте это (хотя, вероятно, должен быть лучший способ):

import numpy as np

def my_function(x):
    return np.array(x[2], dtype='<U3')

my_array = np.array([[1,1,"A"],[1,1,"BBB"], [1,1,"CCC"]])
np.apply_along_axis(my_function, axis=1, arr=my_array)
...