Заполнить массив из вектора - PullRequest
0 голосов
/ 26 апреля 2010

Я хотел бы заполнить двумерный массив из вектора.

Я думаю, что лучший способ объяснить себя - это привести несколько примеров (с массивом длиной [3,5]).

Когда вектор: [1, 0]

[
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0],
  [4, 3, 2, 1, 0]
]

Когда вектор: [- 1, 0]

[
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4],
  [0, 1, 2, 3, 4]
]

Когда вектор: [- 2, 0]

[
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2],
  [0, 0, 1, 1, 2]
]

Когда вектор: [1, 1]

[
  [2, 2, 2, 1, 0],
  [1, 1, 1, 1, 0],
  [0, 0, 0, 0, 0]
]

Когда вектор: [0, 1]

[
  [2, 2, 2, 2, 2],
  [1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0]
]

У вас есть какие-нибудь идеи, хорошая библиотека или план? Любые комментарии приветствуются. Спасибо.

Примечание: я консультировался с классами Ruby "Matrix" и "Vector", но я не вижу способа использовать его по-своему ...

Редактировать: Фактически, каждое значение - это количество ячеек (от текущей ячейки до последней ячейки) в соответствии с данным вектором.

Если мы возьмем пример, где вектор [-2, 0], со значением * 1 * (в массиве [2, 3]):

array = [
  [<0>, <0>, <1>, <1>, <2>],
  [<0>, <0>, <1>, <1>, <2>],
  [<0>, <0>, <1>, *1*, <2>]
]

... мы могли бы подумать, например:

Вектор [-2, 0] означает, что -2 для столбцов и 0 для строк. Так что если мы находятся в массиве [2, 3], мы можем двигаться 1 раз слева (слева, потому что 2 отрицательный) с 2 длиной (потому что -2.abs == 2). И мы не движемся сверху или снизу, потому что 0 для строки.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2010

Этого довольно легко добиться:

require 'matrix'

def build(rows, cols, vector)
  Matrix.build(rows, cols){|i, j| vector.inner_product([cols-j-1, rows-i-1]) }
end

build(3, 5, Vector[1, 0]) # => your first example
# ...
build(3, 5, Vector[0, 1]) # => your last example

Вам понадобится последняя матричная библиотека , которая вводит Matrix.build.

Примечание: я нахожу ваши примеры немного странными, а третий - еще более странным. Похоже, мы должны делить на вектор, который вы даете, разве это 0? В любом случае, просто адаптируйте блок к нужной формуле.

0 голосов
/ 26 апреля 2010

хорошо, я немного смущен, но я собираюсь сделать снимок в темноте

Вам нужно пройти через каждую точку массива и вызвать функцию, которая вычислит значение в этой позиции

так что мы имеем петля я петля j массив [I, J] = Vectorfunction (I, J, вектор); следующий j следующий я

функция (I, J, вектор) Здесь я предполагаю, что вы как-то используете положение в массиве и наклон линии, определяемой вектором. Что я не могу извлечь из данных, но я уверен, что такая функция существует.
Скорее всего, это связано с Аркко, чтобы получить угол. а затем вернуть i * arcsin + j + arccos

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...