У меня есть массив m x n
: a
, где целые числа m > 1E6
и n <= 5
.numpy: оценочная функция в матрице, используя предыдущий массив в качестве аргумента при вычислении следующего
У меня есть функции F и G, которые состоят, как это: F (у, G (у, т)). u - массив 1 x n
, t - скаляр, и F и G возвращает 1 x n
массивы.
мне нужно оценить каждую из row
a
в F, и использовать предварительно оцененную строку в качестве у -array для следующей оценки. Мне нужно сделать m
таких оценок.
Это должно быть очень быстро. Раньше я был поражен оценкой scitools.std
StringFunction
для целого массива, но эта проблема требует использования ранее вычисленного массива в качестве аргумента при вычислении следующего. Я не знаю, может ли StringFunction это сделать.
Например:
a = zeros((1000000, 4))
a[0] = asarray([1.,69.,3.,4.1])
# A is a float defined elsewhere, h is a function which accepts a float as its argument and returns an arbitrary float. h is defined elsewhere.
def G(u, t):
return asarray([u[0], u[1]*A, cos(u[2]), t*h(u[3])])
def F(u, t):
return u + G(u, t)
dt = 1E-6
for i in range(1, 1000000):
a[i] = F(a[i-1], i*dt)
i += 1
Проблема с выше кода является то, что это очень медленный процесс, как ад. Мне нужно выполнить эти вычисления с помощью numpy миллисекунд.
Как я могу делать то, что хочу?
Благодарим вас за наше время.
С наилучшими пожеланиями,
Marius
Ваш вопрос не имеет полного смысла ... Если ** u ** - это предварительно оцененная строка, то ваши формулы никогда не будут использовать текущую строку. Я предполагаю, что вы имеете в виду что-то вроде ** F ** (** v **, ** G ** (** u **, t)), где ** u ** - результат оценки последней строки , и ** v ** - текущая строка, но, пожалуйста, подтвердите и определите, как вы обрабатываете первую строку, где нет «ранее оцененной строки». Кроме того, и что более важно, не зная, что ** F ** и ** G ** делают, я сомневаюсь, что кто-нибудь сможет дать вам удовлетворительный ответ. – Jaime
Нет, насколько я могу судить, то, что я набрал, - это то, что я хочу сделать. Я добавлю дополнительную информацию. –
Не могли бы вы добавить код для медленной, но правильной реализации? –