有没有像numpy一样提供数组操作的C#库?

16

我开始使用Numpy,非常喜欢它的数组处理能力。有没有类似的C#库可以提供具有相似功能的数组操作呢?我最想要的特性是:

  • 从另一个数组创建一个数组
  • 便捷/轻松地迭代n维数组
  • 对数组进行切片
2个回答

8

NumPY已通过IronPython移植到.NET平台。


2
此链接指向原始 PTVS 项目。PTVS 从未真正实现 numpy,现在已经过时。唯一接近 .NET 上 numpy 的项目是 ILNumerics - user492238
备选库1:https://github.com/SciSharp/Numpy.NET - Alex P.
备选库2:https://github.com/Quansight-Labs/numpy.net - Alex P.
备选库3:https://numerics.mathdotnet.com/ - Alex P.

1
我认为你不需要使用库。我认为LINQ可以很好地完成你提到的所有工作。

从另一个数组创建一个数组

int[,] parts = new int[2,3];

int[] flatArray = parts.ToArray();
// Copying the array with the same dimensions can easily be put into an extension 
// method if you need it, nothing to grab a library for ...

简单迭代

int[,] parts = new int[2,3];

foreach(var item in parts)
    Console.WriteLine(item);

数组的切片

int[] arr = new int[] { 2,3,4,5,6 };
int[] slice = arr.Skip(2).Take(2).ToArray();

// Multidimensional slice 
int[,] parts = new int[2,3];
int[] slice = arr.Cast<int>().Skip(2).Take(2).ToArray();

在最后一个例子中,尴尬的.Cast<int>是由于C#中的多维数组只是IEnumerable而不是IEnumerable<T>造成的。(由于这个怪异的特性)

22
LINQ 在数值方面功能不足,只能处理一维数据,并且速度远不及优秀的数学库。 - CodesInChaos
1
好的,这个问题涉及到数组操作,但它并没有说明性能或数值计算是否是一个因素。 - driis
1
至少提到了“数组切片”和“n维度”,这些在LINQ中缺失。 - CodesInChaos
4
数组切片是指向原始数组的。你正在生成切片的副本。 - CodesInChaos
@driis 当然需要一个库!像矩阵加法、减法、点积、叉积和行列式这样的东西不需要从头开始实现! - user32882

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接