Самый быстрый способ применить арифметические операции к System.Array в IronPython

Я хотел бы добавить (арифметика) два больших System.Arrays поэлементно в IronPython и сохранить результат в первом массиве следующим образом:

    for i in range(0:ArrA.Count) :
      arrA.SetValue(i, arrA.GetValue(i) + arrB.GetValue(i));

Однако это кажется очень медленным. Имея фон C, я хотел бы использовать указатели или итераторы. Тем не менее, я не знаю, как мне быстро применить иронию IronPython. Я не могу использовать списки Python, так как мои объекты строго из типа System.Array. Тип - 3d-поплавок.

Какой самый быстрый / быстрый способ выполнить это вычисление?

Редактировать:

  • Количество элементов ок. 256 ^ 3.
  • 3d float означает, что к массиву можно получить доступ следующим образом: array.GetValue(indexX, indexY, indexZ). Я не уверен, как организована соответствующая память в System.Array в IronPython.
  • Предыстория: я написал интерфейс к API IronPython, который предоставляет доступ к данным в программном инструменте моделирования. Я извлекаю трехмерные скалярные данные и накапливаю их во временном массиве в моем скрипте IronPython. Накопление выполняется 10000 раз и должно быть быстрым, чтобы моделирование не занимало много времени.

1 ответ

Можно ли использовать библиотеку numpy, разработанную для IronPython?

https://pytools.codeplex.com/wikipage?title=NumPy%20and%20SciPy%20for%20.Net

Похоже, что он поддерживается, и, насколько я знаю, он настолько близок к функциональности указателей в стиле Python, как C, с массивами и тому подобным.

Создать массив:

x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)

Умножим все элементы на 3,0:

x *= 3.0
Другие вопросы по тегам