Получить координаты матрицы по ее сглаженному индексу - PullRequest
1 голос
/ 13 мая 2011

Как мы можем получить координаты матрицы размеров по ее форме и ее сглаженному индексу?

Я имею в виду, если, например, у меня есть следующая (2,3) матрица из 2 измерений:

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

... и я хочу найти значение индекса, выделенное жирным шрифтом из координат [0,2], как я могу это сделать?

Или, если у меня есть это (2,2, 5) матрица из 3 измерений:

[ [ [ nil, nil ], 
    [ nil, nil ] ], 
  [ [ nil, nil ], 
    [ nil, nil ] ], 
  [ [ nil, *9*   ], 
    [ nil, nil ] ], 
  [ [ nil, nil ], 
    [ nil, nil ] ], 
  [ [ nil, nil ], 
    [ nil, nil ] ] ]

... и я знаю, что координаты, которые я хочу, имеют значение уплощенного индекса 9, как я могу найти относительные координаты: [1,0,2]?

Если возможно, я хотел бы знать общий и простой метод, который работает на матрице любой формы.

Большое спасибо за вашу помощь.

1 Ответ

1 голос
/ 13 мая 2011

Вы можете использовать этот простой алгоритм:

Допустим, у вас есть матрица A [a] [b] [c] [d] (где a, b, c, d - размеры) иindex X.

Чтобы получить первую координату индекса X, вы просто делите X на b * c * d.

Пусть это будет следующая матрица, имеющая размеры [2] [5] и индекс X = 7

 0 1 2 3 4
 5 6 7 8 9

Сначала вы делите X на последнее измерение, чтобы найти первую координату.Х / 5 = 1.Затем оттуда вы идете вперед и даете X значение X% = 5.Таким образом, у вас будет X = 7% 5 = 2.Теперь вам нужно искать координаты для остальных измерений, используя тот же алгоритм.Если вы достигнете последнего измерения, координатой будет оставшийся X, в данном случае 2. Таким образом, координаты для X = 7 равны [1] [2], что на самом деле является ответом.

Опять же, дляобщий случай, когда у вас есть размеры a, b, c, d.
Я отмечу (yd) y-е измерение.

X=index
(1d)=X/b*c*d
X gets value X % b*c*d

(2d)=X/c*d
X gets value X % c*d

(3d)=X/d
X gets value X % d

(4d)=X

Если бы у вас были размеры [2][2] [5] вы получите:

X=9;

(1d) = 9/2*5 = 0
X = 9%10 = 9

(2d) = 9/5 = 1
X = 9%5 = 4

(3d) = 4

Result: [0][1][4] is the 9th element.

Чтобы перейти от [0] [1] [4] к индексу 9, вы выполните обратный алгоритм, умножив:

X=(1d)*b*c + (2d)*c + 3d = 0 + 1*5 +4 =9

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