Мне нужно создать 2D-массив numpy из значений x, y из функции return to plot с использованием contourf из matplotlib, и до сих пор я использую «C», как структура, что это, кажется, очень неэффективен в Python:Учет списка для двух переменных цикла в Python и numpy
dim_x = np.linspace(self.min_x, self.max_x, self.step)
dim_y = np.linspace(self.min_y, self.max_y, self.step)
X, Y = np.meshgrid(dim_x, dim_y)
len_x = len(dim_x)
len_y = len(dim_y)
a = np.zeros([len_x, len_y], dtype=complex)
for i, y in enumerate(dim_y):
for j, x in enumerate(dim_x):
a[i][j] = aux_functions.final_potential(complex(x, y), element_list)
cs = plt.contourf(X, Y, (a.real), 100)
Как это может быть сделано в более вещий образом?
Спасибо!
Что делает функция 'final_potential'? То, что вы хотите сделать, это «векторизация» этой функции, а не запись вложенных циклов. 'fromfunction' или' vectorize' хороши, но они так же неэффективны, как и ваш цикл. –
Можете ли вы указать мне документацию о «векторизации» моей функции? – Ivan
Прочитайте различные учебники 'numpy'. (например, http://www.tramy.us/numpybook.pdf Также см. http://scipy-lectures.github.com/) Основная идея - применить операции ко всему массиву вместо отдельных элементов. Если вы приведете пример своей функции «final_potential», мы сможем помочь вам в этом. Это обычно довольно просто, но это может быть не сразу очевидным, если вы этого еще не сделали. В некоторых случаях (например, методы с разностными разностями) это просто невозможно, но они относительно редки. –