2016-01-23 1 views
1

Я только начинаю с ILNumerics. Я не знаком со всеми функциями массива матрицы ILMath.Загрузка матрицы 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

Что не так с кодом? Можно было использовать простой 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; 

Но лично я не думаю, что это стоит усилий. Мне нравится ваша версия лучше всего.

+0

То, что я искал, было более быстрой функцией ILMath, которая могла бы заполнить массивы Colors and Postions с их значениями с помощью одного оператора. –