C# 双精度[,],整数[],布尔[…]。。。C语言中的矩阵、向量操作扩展#

C# 双精度[,],整数[],布尔[…]。。。C语言中的矩阵、向量操作扩展#,c#,arrays,math,matrix,C#,Arrays,Math,Matrix,我需要(用于快速原型和库集成)类似的东西(用于常规阵列的扩展) 在任何地方都有这样的东西吗? 在上,可能有人实现了它,所以我不需要自己动手吗?像Python这样的语言支持混合类型列表。您可以创建一个IronPython脚本,然后从C#应用程序调用它。请按照下面的说明查看如何从应用程序调用IronPython脚本。查看。它是一个开源数学库。你可能会找到你需要的东西 他们在结尾有一个使用矩阵的例子。这应该不太难自己写 需要非常小心的是如何将数组编辑为属性 类似于(非常粗糙的未经测试的代码,但应该给您

我需要(用于快速原型和库集成)类似的东西(用于常规阵列的扩展)

在任何地方都有这样的东西吗?
在上,可能有人实现了它,所以我不需要自己动手吗?

像Python这样的语言支持混合类型列表。您可以创建一个IronPython脚本,然后从C#应用程序调用它。请按照下面的说明查看如何从应用程序调用IronPython脚本。

查看。它是一个开源数学库。你可能会找到你需要的东西


他们在结尾有一个使用矩阵的例子。

这应该不太难自己写

需要非常小心的是如何将数组编辑为属性

类似于(非常粗糙的未经测试的代码,但应该给您一个想法):

公共类数组{
//添加您自己的..等
T[,]矩阵;//不要公开查看http://msdn.microsoft.com/en-us/library/k2604h5s.aspx
公共int索引{get;private set;}
//请注意,这将是一个副本
公共T[]获取值(){
T[]retval=新的T[matrix.GetLength(1)];
for(int i=0;i
然后扩展阵列:

public static ArrayExtensions {

    public void SetRow<T> ( this T[,] matrix, int rowIndex, T[] values ) {
        //check rowIndex in range and array lengths match
    }

    public ArrayRow<T> GetRow<T> ( this T[,] matrix, int rowIndex ) {
        //check rowIndex in range
        return new ArrayRow<T> ( matrix, rowIndex );
    }
}
公共静态数组扩展{
public void SetRow(此T[,]矩阵,int rowIndex,T[]值){
//检查范围中的行索引和数组长度是否匹配
}
公共ArrayRow GetRow(此T[,]矩阵,int rowIndex){
//检查范围内的行索引
返回新的ArrayRow(矩阵,行索引);
}
}

然后,您可以依赖正在推断的类型参数。

我编写了C#library来测试基于扩展的代码生成设计。

“可能有人实现了它,所以我不需要自己动手?”也许您的老板需要找其他人来实现它。我同意,用于此类目的的扩展方法将非常有用。然而,你难道不想在2D数组上操作吗,例如,
int[,]
等等?“也许你的老板需要找其他人来做。”PoweRoy“我只是认为类似矩阵的数字数组扩展的想法并非毫无意义。所以任何人都可以在家里实现这个,所以我不需要从头开始。我在互联网上找不到。创建矩阵或向量之类的类型并定义对它们的操作不是更好吗?我知道Math.NET、dnAnalytics等,但它们都有矩阵类。但我不需要它们。我需要的是:对于ex,我可以将我的分类算法与SVM.NET、NeronDotNet、alglib.NET中的千个分类算法进行比较。它们在公共问题(int count,double[]y,Node[]x,int maxIndex)公共静态void nbcbuildm(ref double[,]xy,ref bool[,]m,int npoints,ref int[]f,int nvars,int nclasses,int标志,ref int info,ref double[]b,ref nbcreport rep)方法中都使用了不同的数组。。。我需要转换和数据准备例程-理想情况下-数组扩展我不需要任何类。我知道扩展和泛型类型。我可以自己实现一切。但它不仅需要时间来编写,而且还需要时间来测试——这样一切都能正常工作。所以,我询问是否存在这样的代码库,这样我就不需要从头开始了。我恐怕不知道有没有这样的库。对于您的示例,您需要为您的
var r=d.GetRow…
创建某种类型的类,因为这样做的结果将是一个“行”的副本,而不是对多维arrayCopy的引用(作为double[]实例)是可以的。我不关心性能和内存使用。类似MATLAB的行为(无法获得行引用)让我很满意。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。
public class ArrayRow<T> {
    //add your own ..ctor etc

    T[,] matrix; //don't make this public see http://msdn.microsoft.com/en-us/library/k2604h5s.aspx
    public int Index { get; private set; }

    //note that this will be a copy
    public T[] GetValues() {
        T[] retval = new T[matrix.GetLength(1)];
        for ( int i = 0; i < retval.Length; i++ )
           retval[i] = matrix[Index, i];

        return retval;
    }

    public void SetValues(T[] values)
    //..and so on, you get the idea
}
public static ArrayExtensions {

    public void SetRow<T> ( this T[,] matrix, int rowIndex, T[] values ) {
        //check rowIndex in range and array lengths match
    }

    public ArrayRow<T> GetRow<T> ( this T[,] matrix, int rowIndex ) {
        //check rowIndex in range
        return new ArrayRow<T> ( matrix, rowIndex );
    }
}