Многомерный вектор
В программировании многомерный вектор — это вектор , который индексируется упорядоченным списком целых чисел. Количество целых чисел, используемых в этом списке для индексации многомерного вектора, всегда одинаково и называется размерностью вектора . С другой стороны, пределы каждого из целых чисел, входящих в состав индекса, определяют размерность вектора . Вектор размерности k часто называют k -мерным . Одномерные векторы соответствуют векторамобычные, в которых элементы располагаются в одну строку (или столбец); Двумерные векторы — это еще один способ вызова классических матриц, в которых их элементы расположены в несколько строк и столбцов (два измерения). На практике размерность вектора редко превышает три.
Представление в памяти
Способ размещения элементов одномерного вектора в памяти компьютера тривиален, поскольку он сам по себе имеет форму (очень большого) одномерного вектора. Однако когда вы хотите хранить n -мерные векторы , проблема перестает быть очевидной. Предположим, мы хотим представить этот простой двумерный массив:
Самый распространенный способ индексации этой матрицы (или двумерного вектора) — использование соглашения RC ( строка — столбец , строка — столбец ) , в котором ссылки на элементы указываются сначала строкой, а затем столбцом (например, ), таким образом имеем:
Индексацию многомерных векторов можно выполнить одним из следующих способов:
- порядок родительской строки : элементы каждой строки хранятся по порядку, сначала одна строка, затем другая и так далее. Этот метод в основном используется для статических массивов , объявленных в C.
| 1 | два | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
- Основной порядок столбцов : аналогичный предыдущему, но на этот раз элементы сохраняются по столбцам, а не по строкам:
| 1 | 4 | 7 | два | 5 | 8 | 3 | 6 | 9 |
- X-мерный вектор : обычно многомерные векторы представляются с помощью одномерного вектора, который содержит ссылки (или указатели) на другие одномерные векторы. Эти подвекторы могут быть нечетко строками или столбцами матрицы, все зависит от критерия или интерпретации, которую вы хотите принять.
Первые две формы более компактны и имеют потенциально лучшую локализацию ссылки, но они также более ограничены; векторы должны быть прямоугольными в том смысле, что ни одна строка не может содержать больше элементов, чем другая. Векторы векторов, с другой стороны, позволяют создавать неравные векторы , также называемые зубчатыми векторами , в которых допустимый диапазон одного индекса зависит от значения другого, или, другими словами, что разные строки (или столбцы) они может быть разного размера. Векторы векторов также полезны в языках программирования, которые допускают использование только одномерных векторов в качестве примитивов.
Во многих приложениях, таких как числовые приложения, работающие с матрицами , вам необходимо выполнять итерации по двумерным прямоугольным векторам предсказуемым образом. Например, вычисление элемента матричного произведения A x B включает одновременное перебор строки A и столбца B. Индексируя элементы массива по мере его хранения в памяти, вы должны максимально оптимизировать операции размещения каждого элемента. Иногда компилятор может автоматически определить расположение последовательного массива элементов вектора, чтобы они также последовательно сохранялись в памяти, в нашем примере он может выбрать порядок родительских строк для A и порядок родительских столбцов для B. Есть и другие способы хранения элементов матрицы в памяти, которые будут более эффективными для других типов задач, например, если вы хотите выполнить итерацию по главной диагонали матрицы.