Я пытаюсь ускорить некоторые из моих циклов for, используя векторизацию. К сожалению, функции внутри циклов более сложны, чем простые арифметические операции. Я хочу взять каждый элемент массива, манипулировать им, используя функцию с несколькими входами, а затем поместить его в правильное место в словаре. Для этого у меня есть функция под названием increment_element:
def increase_element(number, word, factor=0.05):
print(2.*factor)
return {'factor': 2.*factor, 'number': number, 'word': word}
То, что я пытаюсь достичь, это перейти от массива:
array([0., 0.1, 0.2])
к массиву:
array([
{factor: 0., number: 5, word: 'hi'},
{factor: 0.2, number: 5, word: 'hi'},
{factor: 0.4, number: 5, word: 'hi'}
])
эффективным способом (т. Е. Без использования цикла for), поскольку в действительности функция increment_element выполняется долго.
Я пытался использовать функцию для преобразования всех входных данных. к одному входу, затем сопоставьте его с массивом numy следующим образом:
import numpy as np
muls = np.linspace(0, 1, 11)
def increase_element(number, word, factor=0.05):
print(2.*factor)
return {'factor': 2.*factor, 'number': number, 'word': word}
def single_increase_element(inputs):
return increase_element(inputs[0], inputs[1], factor=inputs[2])
single_array = np.array(list(map(lambda x: (5, 'hi', x), muls)))
np.array(list(map(single_increase_element, single_array)))
Однако я получаю приведенную ниже ошибку при попытке вывести 2. * factor
TypeError: canне умножайте последовательность на не-int типа 'float'
Любой совет будет принят с благодарностью!