У меня есть массив numpy A, состоящий из изображений одного и того же размера [N_images, width, height, 3].Ошибка трансляции при векторизации misc.imresize()
Я хочу применить misc.imresize()
к каждому и каждому из них самый быстрый способ.
Так я определил:
def myfunc(x):
return misc.imresize(x,(wanted_width,wanted_height))
, а затем я сделал:
vfunc=np.vectorize(my_func)
, но когда я пытаюсь:
test=vfunc(A)
я получаю не-подходит-массив-shape- для конвертирования в изображения. я думал, что это было, потому что я не уточнял ось, на которой должны быть векторизованной оп, который вызвал его не транслирует ИЙ массив способа хотел, чтобы я попробовал другую вещь, чтобы сузить ошибку:
test=np.apply_along_axis(my_func,0,A)
и получил ту же ошибку. Даже если я заставляю np.squeeze() в my_func. Это меня очень удивило.
EDIT: Я также пробовал с map
ту же ошибку. Это может быть связано с тем, что вы можете использовать векторизовать со скалярной функцией, как указано @jotasi.
Это должно быть довольно глупо, но я не знаю, что происходит. Может ли кто-нибудь просветить меня? Есть ли способ исправить это?
'np.vectorize' не имеет параметра 'axis', поскольку он предназначен только для функций, которые не знают о нем и принимают скаляры. См. [Этот ответ] (http://stackoverflow.com/a/3379505/6614295) для получения дополнительной информации. – jotasi
Спасибо, я этого не знал! Так что я должен отказаться от попытки его векторизации или есть другие способы? – jean
Я не думаю, что есть простой способ избежать какого-то цикла, так как 'misc.imresize' также не поддерживает векторное приложение вдоль оси. Если ваше изображение достаточно велико, я бы предположил, что цикл не должен представлять собой узкое место в любом случае. – jotasi