Я пытаюсь найти уравнение для математического определения «сплющенного индекса» массива из «сложного индекса». Обратите внимание на следующий пример в Ruby.Узнайте «сплющенный индекс» из «уложенного индекса» массива
matx = [[[ 1, 2, 3, 4],
[ 5, 6, 7, 8]],
[[ 9,10,11,12],
[13,14,15,16]]]
В этом примере matx
представляет собой трехмерную матрицу, а элемент 7
расположен в matx[0][1][2]
. Однако, в следующем примере:
matx.flatten! # => [1, 2, 3, 4, 5, 6, 7, 8,
# 9, 10, 11, 12, 13, 14, 15, 16]
Теперь элемент 7
расположен в matx[6]
.
По существу, я ищу способ, учитывая размеры матрицы и набор индексов для конкретного элемента, преобразовать из уложенной в матрицу матрицу.
Обратный также был бы потрясающим, но я полагаю, что это похоже на то, что похоже (но по существу наоборот) на метод получения этого результата.
Я понял, что обратная функция на самом деле не является функцией, потому что нет никакого способа сказать разницу относительно того, 5 карт ли [2,3] или [3,2] и т. Д. Поэтому я не буду смотреть на это один.
Это отлично работает. Единственное, что путают, - это a) почему вы отменили его? и б) что такое бит с инъекцией, который на самом деле делает? – ashays
После немного дополнительной проверки я понимаю, что это по сути то же самое, что и .reduce (: *) '. Спасибо за помощь снова! :) – ashays
Ну, я хотел, чтобы он работал с любым количеством измерений, поэтому мне пришлось найти общее решение. Выражение 'inject' просто возвращает 1 или 1 столбец x или 1 x столбцов x строк и т. Д. Он вычисляет число, на котором будет умножаться каждый индекс, т. Е. Кумулятивный размер объектов, индексируемых индексом. Поскольку первый индекс индексирует произведение размеров остальных индексов, было удобно обрабатывать как размеры, так и нижние индексы справа налево, отсюда и «обратная». – DigitalRoss