Загрузка матрицы ILMath
Я только начинаю с 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 ответ
Решение
Что не так с вашим кодом? Можно использовать обычный 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;
Но лично я не думаю, что это стоит усилий. Мне больше нравится твоя версия.