#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. Это то, что я искал. Спасибо.