Премного благодарен! Через runctx получилось. Однако вопросов это не решило, а поставило ещё ряд вопросов. Не знаю, как принято на настоящем форуме насчёт разделения тем, посему задам их пока что здесь. Вопросы, наверное, глупые.
В общем, у меня система - трёхмерный массив, а в каждой клетке может быть или не быть частица, причём эти частицы ещё могут двигаться (на одну клетку за раз). Пока что движутся случайно, потом будут двигаться по показаниям нейронной сети. И чтобы они при движении не попадали по несколько в одну и ту же клетку, я строю систему на следующем шаге и последовательно отменяю движение у неправильно движущихся частиц.
А вопросы следующего характера. В процессе вышеуказанного действа в основном мне надо выполнять операции трёх видов - копирование массива, поэлементное применение функции к одному массиву с записью результатов в другой массив и проход по ячейкам массива, но не просто так, а чтобы можно было узнавать и изменять значения соседних клеток, а также клеток с этими же координатами в других массивах. Массивы у меня из numpy.
Так вот, для первых двух задач я написал такую функцию:
def assign3d(dst, fun, src):
xr=range(src.__len__())
yr=range(src[0].__len__())
zr=range(src[0, 0].__len__())
for i in xr:
for j in yr:
for k in zr:
dst[i, j, k]=fun(src[i, j, k])
То бишь она последовательно применяет функцию к элементам одного массива и записывает результат в другой. И профилирование показала, что сия функция почти половину времени отнимает (скажем, копирование массива функцией lambda a: a идёт со скоростью миллион ячеек в секунду, процессор core i3-530). И проход по координатам (третья задача) у меня тоже приблизительно в том же ключе.
Посему вопрос - как грамотно производить означенные операции? И стоит ли овчинка выделки, то бишь намного ли увеличится скорость? Я, конечно, знаю, что преждевременной оптимизацией выложена дорога в ад, но в данном случае на мой взгляд это как-то чересчур.
И ещё - сейчас у меня в клетках массива просто количество частиц, а я хочу, чтобы там были указатели на объекты (грубо говоря - экземпляры нейронной сети). И чтобы при движении эти указатели переходили из клетки в клетку, а в пустых клетках соответственно были пустые указатели. Как это грамотно сделать?
Заранее благодарен.