Как хранить матрицу в базе данных
Перейти к содержимому

Как хранить матрицу в базе данных

  • автор:

Python-сообщество

[RSS Feed]

  • Начало
  • » Django
  • » Хранение в БД симметричной разреженной матрицы без диаг. элементов.

#1 Окт. 9, 2010 14:58:12

fth От: Зарегистрирован: 2010-07-26 Сообщения: 105 Репутация: 0 Профиль Отправить e-mail

Хранение в БД симметричной разреженной матрицы без диаг. элементов.

Помогите определиться со способом хранения такой матрицы в БД. Кроме того в качестве “координат” выступают записи другой таблицы. (т.е. данную матрицу так же можно воспринимать как граф).
Такой вариант:

class Main(): 
name = CharField()

class MatrixItem(Model):
value = FloatField()
x = ForeignKey(Main)
y = ForeignKey(Main)

Не слишком подходит по понятным причинам.

Вот этот вариант кажется оптимальным:

class Main(): 
name = CharField()

class MatrixItem(Model):
value = FloatField()
coor = ManyToManyField(Main, related_name = 'items') #Храниться две ссылки на Main

Но встаёт вопрос о том как извлекать элементы имея на руках две записи Main, самое лучшее что я смог придумать это:

def get_value(p1, p2): 
try:
if p1<>p2:
return p1.items.__and__(p2.items)[0].value #Пользуясь случаем хотелось бы спросить, почему результат p1.items.__and__(p2.items) отличается от p1.items and p2.items ?
else:
return None
except IndexError:
return 0

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

Форум пользователей MySQL

Насколько мне известно в Maria DB появился механизм для работы с графами (OQGRAPH).
А чем, к слову, Вам не нравится идея сохранения пар смежных вершин?

Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли.

#3 23.07.2011 17:35:27

nikolajtesla Завсегдатай Зарегистрирован: 12.10.2010 Сообщений: 25

Re: Как хранить матрицу в БД

Про Maria DB — огромное спасибо.
На счет не нравится — это слишком сильно сказано. Я просто иду другие варианты для хранения и пытаюсь узнать в каких случаях они могут быть более эффективны.
Ведь принимая во внимание, что в для простого графа матрица смежности симметрична и состоит только из возможно есть смысл использовать для ее хранения методы для разряженных матриц

#4 23.07.2011 17:40:25

deadka Администратор Зарегистрирован: 14.11.2007 Сообщений: 2417

Re: Как хранить матрицу в БД

Хм. Ну, всяческие хитрые форматы типа разреженно-строчного — у них же своя структура, свои массивы, и нет нужды хранить всю матрицу целиком — можно хранить в базе эти самые определяющие матрицу массивы.

А графы, в которых мало ребер я бы хранил скорее в списках смежности .

Как хранить матрицу в базе данных

Здравствуйте, aquatic3000, Вы писали:
A>как отобразить ячейки двумерной матрицы на поля в БД
Ок, тогда так:

create table Data ( DepartmentId not null foreign key references Departments(Id), Quarter int not null Year int not null, RowId int not null foreign key references Rows(Id), ColId int not null foreign key references Cols(Id), Data int not null )

Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: хранение матриц в таблице

От: Sinclair https://github.com/evilguest/
Дата: 13.09.07 09:36
Оценка: 2 (1)

Здравствуйте, aquatic3000, Вы писали:

A>ежеквартально множество отделов присылают в офис таблицу со стат данными
A>здесь
A>по-существу это двумерная матрица
A>подскажите пожалуйста
A>какую структуру должна иметь таблица в Access чтобы хранить в ней эти стат. данные
А что за данные-то? Цыфры, тексты, даты?

create table Rows ( Id int primary key, Name text(255) not null ) create table Cols ( Id int primary key, Name text(255) not null ) create table Data ( RowId int not null foreign key references Rows(Id), ColId int not null foreign key references Cols(Id), Data ? // какие данные хранятся в этой "матрице"? )

Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: хранение матриц в таблице

От: wellwell https://www.softperfect.com
Дата: 13.09.07 01:06
Оценка:

«Sergey__» <20839@users.rsdn.ru>wrote in message news:2655129@news.rsdn.ru.
> Здравствуйте, wellwell, Вы писали:
> а причем здесь многомерные массивы? там вообще нет ничего подобного

Матрица есть двухмерный массив.

Posted via RSDN NNTP Server 2.1 beta
хранение матриц в таблице

От: aquatic3000
Дата: 12.09.07 14:47
Оценка:

ежеквартально множество отделов присылают в офис таблицу со стат данными
здесь
по-существу это двумерная матрица
подскажите пожалуйста
какую структуру должна иметь таблица в Access чтобы хранить в ней эти стат. данные

Re: хранение матриц в таблице

От: wellwell https://www.softperfect.com
Дата: 12.09.07 16:30
Оценка:

«aquatic3000» <37254@users.rsdn.ru>wrote in message news:2654867@news.rsdn.ru.
> какую структуру должна иметь таблица в Access чтобы хранить в ней эти стат. данные

А Access обязателен? Можно например в Interbase хранить, там есть специальный тип для (многомерных) массивов. Если все таки в Access, тогда свои структуры в блобе.

Posted via RSDN NNTP Server 2.1 beta
Re[2]: хранение матриц в таблице

От: Sergey__
Дата: 12.09.07 17:55
Оценка:

Здравствуйте, wellwell, Вы писали:
а причем здесь многомерные массивы? там вообще нет ничего подобного

Re: хранение матриц в таблице

От: GarryIV
Дата: 12.09.07 18:22
Оценка:

Здравствуйте, aquatic3000, Вы писали:

A>ежеквартально множество отделов присылают в офис таблицу со стат данными
A>здесь
A>по-существу это двумерная матрица
A>подскажите пожалуйста
A>какую структуру должна иметь таблица в Access чтобы хранить в ней эти стат. данные

Хранить ведь не самоцель, правда? Хранить хоть в одном блобе можно.
Как используется это хозяйство?

WBR, Igor Evgrafov
Re[4]: хранение матриц в таблице

От: Sergey__
Дата: 13.09.07 09:16
Оценка:

Здравствуйте, wellwell, Вы писали:
>> а причем здесь многомерные массивы? там вообще нет ничего подобного
W>Матрица есть двухмерный массив.

ну поместишь ты весь массив в одно поле — и как потом с ним работать?
что может SQL интербейз в работе с массивом? суммировать ячейки, строить графики ?

может лучше спроецировать каждую ячейку массива на отдельное поле в таблице?

Re[2]: хранение матриц в таблице

От: Аноним
Дата: 13.09.07 10:35
Оценка:

Здравствуйте, GarryIV, Вы писали:

GIV>Здравствуйте, aquatic3000, Вы писали:

A>>ежеквартально множество отделов присылают в офис таблицу со стат данными
A>>здесь
A>>по-существу это двумерная матрица
A>>подскажите пожалуйста
A>>какую структуру должна иметь таблица в Access чтобы хранить в ней эти стат. данные

GIV>Хранить ведь не самоцель, правда? Хранить хоть в одном блобе можно.
GIV>Как используется это хозяйство?

Re[2]: хранение матриц в таблице

От: aquatic3000
Дата: 13.09.07 10:54
Оценка:

Здравствуйте, Sinclair, Вы писали:
S>А что за данные-то? Цыфры, тексты, даты?

данные это цифры (статистика)
ежеквартально множество отделов присылают в центральный офис множество стат.отчетов — таблиц со статистическими данными
пример одной из «входящих» табличек здесь
таблички представляют из себя таблицы (в ворде): строка заголовков + столбец заголовков и данные (числовые) в ячейках
по-существу это двумерная матрица

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

мне кажется что данные надо помещать в поля таблиц БД, что бы потом их обрабатывать более менее стандартным средствами субд

конечно можно просто скидывать в файловую систему в txt или XML — одна входящая табличка — один файл (год / квартал / филиал /) — НО как то это не очень

и собственно интересовал вопрос:
а если хранить в БД, то как преобразовывать ячейки из исходной текстовой прямоугольной таблицы в поля таблицы базы данных

как отобразить ячейки двумерной матрицы на поля в БД

Хранение матриц в БД и их выборка, реально?

В БД не очень хорошо разбираюсь, есть в какой ни будь БД поле с типом данных Матрица?

Допустим у меня есть 2 очень похожих матрицы с минимальной разницей
5 5 5
5 5 5
5 5 5
и
5 5 6
5 5 5
5 5 5
Есть какой-то алгоритм что бы быстро найти похожие матрицы, или найти максимально похожую матрицу на эту и т.п.?

  • Вопрос задан более трёх лет назад
  • 878 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 2
Ответ написан более трёх лет назад

DrunkMaster

DrunkMaster @DrunkMaster Автор вопроса
Как именно, в какой БД?

DrunkMaster: Да в любой, наверно.

Обработка, разумеется, будет зависеть от выбранной СУБД и способа хранения.

Если РСУБД — заведите в таблице столько столбцов, сколько надо для размещения матрицы. Для обработки или процедуру пишите или переложите на ЯП, какой используете. Варианты разные есть: например, обрабатывать сами данные в R.

Можно и, например, в JSON хранить, если так больше устраивает.

Есть специализированные СУБД: www.paradigm4.com (по описанию, вроде, подходит).

DrunkMaster

DrunkMaster @DrunkMaster Автор вопроса

AVKor: благодарю за развернутый ответ! В mysql поля для матриц нет, по столбцам думал имитировать но боюсь запросы на выборку в этом случае станут слишком тяжёлыми, за ссылки отдельное спасибо, обязательно знакомлюсь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *