使用Ruby NArray而不是Array有什么好处?

Til*_*ilo 7 ruby arrays numerical-computing narray

我刚刚遇到了Ruby的NArray库 - 请原谅我这个问题时的无知:)

使用NArray库比标准Ruby Array实现有什么好处?

我已经看到NArray面向数值计算,但是看看API,看起来只有几个扩展而不是数字值 - 没有你不能用Array做的事情.

  1. 为什么不使用Array?
  2. 是否有巨大的速度优势?
  3. 有巨大的记忆优势吗?
  4. 使用常规Ruby Array类还有什么优势?

谷歌并没有真正想出这个问题的有用解释.

参考资料我发现:

http://rubydoc.info/gems/narray-ruby19/0.5.9.7/NArray

http://narray.rubyforge.org/index.html.en

http://raa.ruby-lang.org/project/narray/

mas*_*a16 10

另见关于NArray的幻灯片:http://www.slideshare.net/masa16tanaka/narray-and-scientific-computing-with-ruby

看起来像Array只有几个扩展

不,它与Array完全不同.NArray具有许多数值函数和多维特征.另一方面,NArray是静态的; 它没有push/pop方法等.NArray的方法列表是http://narray.rubyforge.org/SPEC.en

_1.为什么不使用Array?

Array拥有Ruby Objects.保持数值是低效的.

_2.是否有巨大的速度优势?

是.上面幻灯片中的第36页显示NArray的速度提高了50倍.

请注意,如果循环是用Ruby编写的,则Array比NArray快.

_3.有巨大的记忆优势吗?

是.至于Float值,在我的64位Linux机器上,Array消耗的内存大约是NArray的4倍.

_4.使用常规Ruby Array类还有什么优势?

  • 支持多维数组
  • 支持数字功能
  • 无需在Array项上进行垃圾回收.GC需要很长时间才能使用大型阵列.
  • 等等


Jör*_*tag 5

我已经看到 NArray 是面向数值计算的,但是从 API 来看,似乎只有少数针对数值的 Array 扩展——没有什么是你不能用 Array..

您错过了最重要的一点:NArray不仅扩展用于数值处理,而且还受到限制。特别是

  • NArray元素只能是固定大小的整数或浮点数
  • NArrays 本身也是固定大小的,它们不能缩小或增长

的实现NArray可以利用这些限制来提供卓越的性能。