相关疑难解决方法(0)

如何将数组列表转换为多维数组

我需要将以下集合转换为double [,]:

 var ret = new List<double[]>();
Run Code Online (Sandbox Code Playgroud)

列表中的所有数组都具有相同的长度.最简单的方法,ret.ToArray()产生double [] [],这不是我想要的.当然,我可以手动创建一个新数组,并在循环中复制数字,但是有更优雅的方式吗?

编辑:我的库是从另一种语言Mathematica调用的,该语言尚未在.Net中开发.我不认为该语言可以利用锯齿状数组.我必须返回一个多维数组.

c# linq jagged-arrays multidimensional-array

17
推荐指数
4
解决办法
3万
查看次数

16
推荐指数
2
解决办法
2034
查看次数

为什么.NET中的矩阵乘法如此之慢?

我不太明白是什么使C#/ .NET(甚至Java)中的矩阵乘法变得如此之慢.

看一下这个基准测试(来源):试图找到更新的基准测试.

Java vs C#vs C++细分http://img411.imageshack.us/img411/9324/perf.gif

C#的整数和双重性能非常接近用MSVC++编译的C++.双精度为87%,32位整数为99%.非常好,我会说.但接下来看矩阵乘法.差距扩大到C#的速度约为19%.这是一个非常大的差异,我不明白.矩阵乘法只是一堆简单的数学运算.怎么这么慢?它不应该与等量的简单浮点或整数运算一样快吗?

这尤其是游戏和XNA的关注点,其中矩阵和矢量性能对物理引擎等事物至关重要.前一段时间,Mono通过一些漂亮的矢量和矩阵类增加了对SIMD指令的支持.它缩小了差距,使Mono比手写的C++更快,尽管没有C++与SIMD一样快.(来源)

矩阵乘法比较http://img237.imageshack.us/img237/2788/resultse.png

这里发生了什么?

编辑:仔细观察,我误读了第二张图.C#看起来非常接近.第一个基准测试只是做了可怕的错误吗?对不起,我错过了第一个基准测试的版本号.我抓住它作为我总是听到的"C#线性代数很慢"的方便参考.我会试着找另一个.

.net c# performance xna matrix-multiplication

15
推荐指数
3
解决办法
9172
查看次数

14
推荐指数
3
解决办法
1203
查看次数

在C#中创建二维数组的数组

我只想创建一个二维数组的数组来存储坐标点.

所以我想要一个数组,其中每个索引返回一个二维数组,我将其用作xy.

这是我尝试过的:

waypoints = new int[4][,]    {
        {{0},{6, 0}},
        {{1},{1, 1}},
        {{2},{1, 5}},
        {{3},{6, 5}}
    };
Run Code Online (Sandbox Code Playgroud)

我意识到这可能看起来很愚蠢,但我已经尝试在谷歌上查找了,而且我没有取得任何好成绩.

它给出了一个错误:

"错误CS0623:数组初始化程序只能在变量或字段初始化程序中使用.请尝试使用新表达式"

我也试过这样做:

waypoints = new int[4][,] {
        new int[,] {6, 0},
        new int[,] {1, 1},
        new int[,] {1, 5},
        new int[,] {6, 5}
        };
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误:

"错误CS0846:预期嵌套数组初始化程序"

c# arrays initialization initializer multidimensional-array

14
推荐指数
2
解决办法
5964
查看次数

c#将1维数组分配给2维数组语法

我想做的事情如下:

object[] rowOfObjects = GetRow();//filled somewhere else
object[,] tableOfObjects = new object[10,10];

tableOfObjects[0] = rowOfObjects;
Run Code Online (Sandbox Code Playgroud)

这有点可能,语法是什么?

或者我需要这样做:

for (int i = 0; i < rowOfObjects.Length; i++)
{
   tableOfObjects[0,i] = rowOfObjects[i];
}
Run Code Online (Sandbox Code Playgroud)

并使用循环填充二维数组行?

谢谢

c# arrays multidimensional-array

13
推荐指数
2
解决办法
3万
查看次数

使用int [] []和int [,]之间有什么区别?

来自perl背景,我一直使用定义2D数组int[][].我知道你可以使用,int[,]所以有什么区别?

.net c# multidimensional-array

9
推荐指数
3
解决办法
949
查看次数

如何使用Reflection.Emit创建多维数组

我想使用Reflection.Emit创建一个多维数组并设置它的元素.像下面的C#代码一样:

int[,] nums = new int[2, 2];
nums[1, 1] = 2;
Run Code Online (Sandbox Code Playgroud)

转入IL代码:

IL_0000: nop
IL_0001: ldc.i4.2
IL_0002: ldc.i4.2
IL_0003: newobj instance void int32[0..., 0...]::.ctor(int32, int32)
IL_0008: stloc.0
IL_0009: ldloc.0
IL_000a: ldc.i4.1
IL_000b: ldc.i4.1
IL_000c: ldc.i4.2
IL_000d: call instance void int32[0..., 0...]::Set(int32, int32, int32)
Run Code Online (Sandbox Code Playgroud)

用于创建数组的IL代码:

newobj instance void int32[0..., 0...]::.ctor(int32, int32)
Run Code Online (Sandbox Code Playgroud)

以及用于设置数组元素的IL代码:

call instance void int32[0..., 0...]::Set(int32, int32, int32)
Run Code Online (Sandbox Code Playgroud)

什么样的IL Generator.Emit()代码对应那两个IL句子?

c# emit

8
推荐指数
1
解决办法
309
查看次数

声明一个数组类型

在讨论关于SO的另一个问题时,我被告知语法

int[] numbers = new int[10];
Run Code Online (Sandbox Code Playgroud)

比.更好

Array numbers = Array.CreateInstance(typeof(int), 10);
Run Code Online (Sandbox Code Playgroud)

我的问题是,第一个语法何时有用,何时第二个语法有用?为什么?

c# arrays

7
推荐指数
2
解决办法
3572
查看次数

在C#中展平锯齿状数组

有没有一种优雅的方法来在C#中展平2D数组(使用Linq与否)?

比如假设

var my2dArray = new int[][] {
   new int[] {1,2,3},
   new int[] {4,5,6}
};
Run Code Online (Sandbox Code Playgroud)

我想打电话

my2dArray.flatten()
Run Code Online (Sandbox Code Playgroud)

会产生的

{1,2,3,4,5,6}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# linq

7
推荐指数
1
解决办法
3389
查看次数