Матрицы и базы данных - PullRequest
       15

Матрицы и базы данных

6 голосов
/ 06 февраля 2010

Я прошел тему и обнаружил, что эта ссылка довольно полезна и в то же время проста. Хранение матриц в реляционной базе данных Но не могли бы вы, пожалуйста, дайте мне знать, если путь упоминается как

A B C D
E F G H
I J K L

[A B C D E F G H I J K L]

- лучший и простой или даже надежный способ хранения матричных элементов в базе данных. Более того, мне нужно умножить две матрицы и сделать операцию динамической. Так создаст ли это проблему для хранения данных?

Ответы [ 3 ]

1 голос
/ 06 февраля 2010

В postgresql вы можете иметь многомерные массивы, определять свои собственные типы и определять свои собственные функции для этих типов. Например, можно просто сделать:

CREATE TABLE tictactoe (
    squares   integer[3][3]
);

См. Руководство по PostgreSQL для получения информации о том, как создавать свои собственные типы.

0 голосов
/ 06 февраля 2010

- лучший и простой или даже надежный способ хранения матричных элементов в базе данных. Более того, мне нужно умножить две матрицы и сделать операцию динамической. Так создаст ли это проблему для хранения данных?

Я начну с того, что оба подхода верны, но второго недостаточно, как вы написали. Вам нужно иметь некоторую другую информацию, например длину строк или индексы (row, col) каждого элемента, чтобы сохранить матрицу в виде одномерного массива. Обычно это делается для разреженных матриц, где по обе стороны от диагонали сгруппировано множество нулей, окружающих значения.

Сохранение матрицы в базе данных и работа с ней в памяти - это две разные вещи.

Задачи, такие как умножение, требуют (row, col) индексов. Сохранение матрицы в виде двумерного массива означает, что они будут у вас, поэтому никакой другой информации не требуется. Массив 1D также нуждается в этой информации, поэтому вам придется ее предоставить.

Преимущество заключается в массиве 1D для разреженных матриц. В этом случае вам не нужно хранить нулевые значения вне полосы пропускания, но ваши операции, такие как сложение и умножение, становятся более сложными для кода.

0 голосов
/ 06 февраля 2010

Я думаю, это в значительной степени зависит от того, как вы хотите использовать матрицы в вашем приложении.

Является ли БД только постоянным для одного и того же приложения, важна скорость, а размеры неизвестны заранее? Создайте собственную схему сериализации и сохраните двоичный двоичный объект.

Является ли БД для совместного использования между приложениями с заранее неизвестным размером? Используйте список с разделителями-запятыми.

Вы обеспокоены целостностью данных, безопасностью типов и хотели бы запрашивать отдельные ячейки? Затем используйте схему (строка, столбец, значение ячейки).

Знаете ли вы, что ваши матрицы имеют фиксированный размер и относительно малы, например, матрицы преобразования 4X4, и будут иметь отношение 1 к 1 с любым элементом в БД? Тогда в вашей таблице может быть 16 строк, выложенных в линию.

Подумайте о своих случаях использования и экспериментируйте!

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