ILMath矩阵加载

时间:2016-01-23 00:18:06

标签: c# ilnumerics

我刚开始使用ILNumerics。我并不熟悉所有ILMath矩阵数组函数。

我使用ILSurface图创建了一个自定义颜色贴图,并手动将其转换为数组,以便在ILColormap()创建中使用。

ColorBlend colorblend new ColorBlend // my color map
{
    Positions = new[] {0, 0.40F, 0.55F, 0.90F, 1},
    Colors = new[] {Color.Blue, Color.Lime, Color.Yellow, Color.Red, Color.FromArgb(255, 102, 102)}
},


ILArray<float> data = ILMath.zeros<float>(colorBlend.Colors.Length,5);
for (var i = 0; i < data.Length; i++)
{
    data[i, 0] = colorBlend.Positions[i];
    data[i, 1] = colorBlend.Colors[i].R / 255f;
    data[i, 2] = colorBlend.Colors[i].G / 255f;
    data[i, 3] = colorBlend.Colors[i].B / 255f;
    data[i, 4] = colorBlend.Colors[i].A / 255f;
}

是否有比for循环更简单的方法来构建这个数组?

1 个答案:

答案 0 :(得分:1)

您的代码有什么问题?可以使用普通的Linq来防止循环:

data.a = ILMath.reshape<float>(colorBlend.Positions.SelectMany(
 (f, i) => new[] {
                  f,
                  colorBlend.Colors[i].R / 255f,
                  colorBlend.Colors[i].G / 255f,
                  colorBlend.Colors[i].B / 255f,
                  colorBlend.Colors[i].A / 255f
                  },
(f, c) => c).ToArray(), 5, colorBlend.Positions.Length).T;

但就个人而言,我认为这不值得。我最喜欢你的版本。