есть ли более быстрый способ создать массив элементов пустого массива без использования циклов for

Я хочу создать массив элементов. Я могу сделать это с помощью цикла, но я хочу знать, есть ли другой способ, например, функция numpy или что-то еще, чтобы сделать это за меньшее время.

это то, что я хочу сделать:

def no_loops(y):


   mat = []
   for i in range(5012):
       mat.append(y[i])

   fun = funcion_a(mat)

   return fun

Массив у пуст. Элементы массива являются решениями системы уравнений, которую решит scipy. Я хочу изменить цикл for на что-то более быстрое.


person Gian Luigi Canepa Sprovera    schedule 11.11.2019    source источник
comment
Массив y пуст — и как в этом случае работает y[i]? Не похоже на рабочий код   -  person RomanPerekhrest    schedule 11.11.2019
comment
Этот цикл просто делает копию y   -  person hpaulj    schedule 11.11.2019
comment
root из scipy optimise нуждается в пустом массиве для повторения и поиска решения нелинейной системы уравнений.   -  person Gian Luigi Canepa Sprovera    schedule 11.11.2019
comment
y не существует, все, что я хочу сделать, это дать индекс значений, которые уже есть в другой функции, и решить их.   -  person Gian Luigi Canepa Sprovera    schedule 11.11.2019


Ответы (1)


Если вам нужен новый массив определенного размера и вы хотите игнорировать очень запутанный y из вашего примера кода, вы можете сделать что-то вроде этого:

def no_loops():
    # Create an array of length 5012, all elements of which are zero.
    return funcion_a(numpy.zeros(5012))

В этом случае вы также можете использовать numpy.empty, но Я предпочитаю детерминизм numpy.zeros.

Если вы хотите скопировать данные в y, вы можете явно скопировать с помощью numpy.array:

def no_loops(y):
   return funcion_a(numpy.array(y[:5012]))

Вы также можете исследовать использование numpy.asanyarray, если вам нужно поддерживать подклассы numpy.array. См.: Numpy - массив против массива

person NicholasM    schedule 11.11.2019