Массив вещания с NumPy - PullRequest
       5

Массив вещания с NumPy

2 голосов
/ 09 августа 2010

Как мне написать следующий цикл, используя неявный цикл Python?

def kl(myA, myB, a, b):
    lots of stuff that assumes all inputs are scalars

x, y = meshgrid(inclusive_arange(0.0, xsize, 0.10),\
                inclusive_arange(0.0, ysize, 0.10))

for j in range(x.shape[0]):
    for i in range(x.shape[1]):
        z[j, i] = kl(x[j, i], y[j, i])

Я хочу сделать что-то вроде

z = kl(x, y)

но это дает:

TypeError: only length-1 arrays can be converted to Python scalars

Ответы [ 2 ]

5 голосов
/ 09 августа 2010

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

Вы можете использовать numpy.frompyfunc для преобразования существующей функции kl в ufunc.

kl_ufunc = numpy.frompyfunc(kl, 4, 1)
...
z = kl_ufunc(x + 1.0, y + 1.0, myA, myB)

КонечноЕсли вы хотите, вы можете вызвать ufunc kl вместо kl_ufunc, но тогда первоначальное определение kl будет потеряно.Это может быть хорошо для ваших целей.

1 голос
/ 10 августа 2010

Здесь есть видео, которое может оказаться полезным:

http://showmedo.com/videotutorials/video?name=10370070&fromSeriesID=1037

Обратите внимание, что это часть серии учебных пособий, в которых обсуждается широкий спектр интересных тем.

Просто к вашему сведению.

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