Многомерный IEnumerable в многомерный массив float[,,]

Рейтинг: 0Ответов: 1Опубликовано: 05.02.2023

Как пересобрать такой многомерный IEnumerable в многомерный массив float[1,37,12] ?

Что является переключателем для for ?

ToArray() только в одномерный переносит.

введите сюда описание изображения

Ответы

▲ 2Принят

IEnumerable это перечислимое, оно не может быть скольки-то мерным, вы что-то перепутали. В реальности output не IEnumerable, у него реальный тип есть. Покажите код. И зачем вам вообще в массив это копировать? Здесь же простым подсчетом индексов можно напрямую к данным обращаться через .Buffer. Есть еще .Strides, но вы не показали, что там.

Окей, давайте в лоб.

Вот вы сделали

float[] array = <...>.ToArray();

Теперь создайте 3D массив

float[,,] array3D = new float[1, 37, 12];

И скопируйте данные

Buffer.BlockCopy(array, 0, array3D, 0, 1 * 37 * 12 * sizeof(float));

Готово.

Это просто, но есть недостаток данного подхода, все данные вы копируете дважды - сначала в одномерный массив, затем в трехмерный. С большой вероятностью в этом нет необходимости, но так как вы не дали никакой информации, зачем это и откуда взялось - других решений здесь найти невозможно. Гадание по скриншотам - так себе занятие.