Python3: Векторизация 2D-функции как выход для 2D-массива - PullRequest
0 голосов
/ 18 июня 2020

У меня есть простая функция:

def F(rx,ry):
    return rx**2+ry**2

Затем мне нужно заполнить массив, запустив этот вложенный l oop:

for i in range(xarr.size):
     for j in range(yarr.size):

         rx=xarr[i]
         ry=yarr[j]


         array_2d[i,j] = F(rx,ry)

Можно ли векторизовать это? Моя идея - получить что-то вроде этого:

 array_2d[:,:] = F(xarr[:],yarr[:])

Я видел это:

 vectfunc = np.vectorize(F,otypes=[np.float],cache=False)

Это может дать мне 1D-массив, например:

 vectfunc(xarr,1)->1D array 

Но я не понимаю, чем это может мне помочь.

1 Ответ

0 голосов
/ 19 июня 2020

К счастью, операции, которые вы хотите выполнить, уже векторизованы в numpy.

Итак, если ваши входные массивы являются numpy массивами, вы можете просто создать функцию, которая делает это в основном (без % timeit). Это показывает вашу работу с 2 numpy массивами длиной 1M:

In [29]: import numpy as np                                                     

In [30]: arr1 = np.random.rand(1_000_000)                                       

In [31]: arr2 = np.random.rand(1_000_000)                                       

In [32]: %timeit result = arr1*arr1 + arr2*arr2                                 
3.54 ms ± 25.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

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