Самый быстрый способ применить арифметические операции к System.Array в IronPython
Я хотел бы добавить (арифметика) два больших System.Array
s поэлементно в 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