【问题标题】:Fastest way to apply arithmetic operations to System.Array in IronPython在 IronPython 中将算术运算应用于 System.Array 的最快方法
【发布时间】:2015-03-27 11:48:39
【问题描述】:

我想在 IronPython 中添加(算术)两个大的 System.Arrays 元素,并将结果存储在第一个数组中,如下所示:

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

但是,这似乎很慢。有 C 背景我想使用指针或迭代器。但是,我不知道应该如何快速应用 IronPython 习语。我不能使用 Python 列表,因为我的对象严格来自 System.Array 类型。类型为 3d float。

计算该计算的最快/快速方法是什么?

编辑:

  • 元素数量约为。 256^3。
  • 3d float 表示可以像这样访问数组:array.GetValue(indexX, indexY, indexZ)。我不确定 IronPython 的 System.Array 中的各个内存是如何组织的。
  • 背景:我为 IronPython API 编写了一个接口,它可以访问模拟软件工具中的数据。我检索 3d 标量数据并将其累积到 IronPython 脚本中的时间数组中。累积执行10,000次并且应该很快,以便模拟不会花费时间。

【问题讨论】:

  • 您能提供更多上下文吗? 3d浮动?一个结构?实际操作是什么? 3加?有多少个元素是大的?手术多久进行一次?
  • 提供了额外的上下文。

标签: iterator ironpython system.array


【解决方案1】:

是否可以使用为 IronPython 开发的 numpy 库?

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

【讨论】:

  • 不幸的是,当我正在连接一个 API 时,我无法离开 System.Array。首先转换为 numpy 不会让它更快,真的吗?
  • 你可以试试通用访问方法 IE for i in range(0:ArrA.Count) : arrA[i] = arrA[i] + arrB[i] 吗?还与 full 比较转换为 numpy,然后返回数组。谁知道? :)
  • 通用访问方法不适用于 3D 数组。据我所知,要转换为 numpy,我必须按照我的问题所示执行相同的操作(时间昂贵的循环)。
  • 尝试 x = np.array(ArrA) 将数组初始化为 numpy。另外我觉得你使用的数组没有分成元组,所以你必须使用 3 get。
猜你喜欢
  • 1970-01-01
  • 2011-07-08
  • 2019-03-02
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 2014-01-13
相关资源
最近更新 更多