Найдите "уплощенный индекс" из "сложенного индекса" массива - PullRequest
1 голос
/ 22 января 2011

Я пытаюсь придумать уравнение для математического определения «уплощенного индекса» массива из «сложенного индекса».Обратите внимание на следующий пример в 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] и т. д. Так что я не буду вдаваться в подробности.

1 Ответ

2 голосов
/ 22 января 2011
class Index
  def initialize *dims
    @dims = dims.reverse
  end

  def if_flat *subs
    raise unless @dims && @dims.size == subs.size
    res = 0
    subs.reverse.each_with_index { |s, i| res += s * @dims[0...i].inject(1) { |m, e| m * e }}
    res
  end
end
puts Index.new(2, 2, 4).if_flat 0, 1, 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...