Используя numpy.vecotrize правильно - PullRequest
0 голосов
/ 28 мая 2018

Я борюсь с этим фрагментом кода, используя np.vectorize

def to_homogenous(x):
'''
Convert a point x to homogenous coordinates.
'''
return np.hstack((x,np.array([1]))).flatten()

vec_to_homo = np.vectorize(to_homogenous)
coords = vec_to_homo([0,1])

Это приводит к следующей ошибке:

ValueErrorTraceback (самая последняяпоследний вызов)
in ()
----> 1 ords1 = vec_to_homo ([0,1])

/ home / lib / python2.7 / site-packages / numpy / lib/function_base.pyc в call (self, * args, ** kwargs)
2753 vargs.extend ([kwargs [_n] для _n в именах])
2754
->2755 return self._vectorize_call (func = func, args = vargs)
2756
2757 def _get_ufunc_and_otypes (self, func, args):

/ home / lib / python2.7 / site-packages/numpy/lib/function_base.pyc в _vectorize_call (self, func, args)
2832
2833, если ufunc.nout == 1:
-> 2834 res = массив (выводы, copy = False, subok= True, dtype = otypes [0])
2835, остальное:
2836 res = кортеж ([array (x, copy = False, subok = True, dtype = t)

ValueError: settingэлемент массива с последовательностью.

Я понимаю сообщение об ошибке, но яне могу за всю жизнь найти, как я должен изменить свою функцию / вызов векторизации для решения этой проблемы.Функция дает правильные результаты, если я передаю только одно целое число, то есть vec_to_homo(0) дает [0,1].

Мой фрагмент очень близок к примеру, приведенному в документации, указанной выше, поэтому я действительно не получаючто идет не так.

Пожалуйста, помогите.
Спасибо!

1 Ответ

0 голосов
/ 28 мая 2018

Ваша проблема как в этом вопросе .np.vectorize подходит только для функций, которые отображают плавающие числа в плавающие, а не плавающие в массивы Numpy.

Кроме того, np.vectorize не ускоряет выполнение кода.Вы можете создать свою собственную логику внутри функции для обработки списка и возврата двумерного массива, используя понимание, циклическое выполнение или аналогичное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...