Как инициализировать разные переменные (одновременно) нулями перед циклом for?

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

Я пишу код, в котором я должен вызывать одну и ту же функцию несколько раз с разными параметрами внутри цикла for . Эта функция возвращает четыре переменные, и я хотел бы сохранить их в numpy array (матрице) для удобства построения графика позже.

Например, предположим, что я хочу оценить функции y = ax , y = x/a , y = ax^2 и y = x^2/a для разных значений a at x = [0, 10] . Я создаю функцию Python для оценки четырех разных функций, давайте назовем их, y1 , y2 , y3 и y4 . Я создаю для этого цикл for, и каждая переменная будет a numpy array , причем каждый столбец будет определенным значением a , а каждая строка — определенным значением x . Дело в том, что мне нужно инициализировать переменные перед циклом, и я не могу найти способ сделать это простым, красивым и питоническим способом.

 import numpy as np

def func(x, a):
    y1 = a*x
    y2 = x/a
    y3 = a*x**2
    y4 = x**2/a
    return y1, y2, y3, y4

x = np.arange(0, 11)
a = np.array([1, 2, 3, 4])

y1 = np.zeros((len(x), len(a)))
y2 = np.zeros((len(x), len(a)))
y3 = np.zeros((len(x), len(a)))
y4 = np.zeros((len(x), len(a)))
for i in range(len(a)):
    y1[:, i], y2[:, i], y3[:, i], y4[:, i] = func(x, a[i])
 

Я просто хотел бы найти лучший способ инициализации y1 , y2 , y3 , и y4 . Конечно, я приветствую любые другие советы, поскольку я пришел из Matlab, это может быть не лучшим способом сделать это в Python.

Ответ №1:

Используйте понимание и распакуйте:

 y1, y2, y3, y4 = (np.zeros((len(x), len(a))) for _ in range(4))
 

Комментарии:

1. Это то, что я искал. Спасибо.