Перейти к содержимому

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

  • автор:

unixforum.org

[Решено] Как хранить/создавать/изменять симметричную разряженную матрицу. (Желательно в реляционной модели данных.)

8 сообщений • Страница 1 из 1
ffldove Сообщения: 480 Статус: Keep It Simple, Stupid ОС: RFRemix 14

[Решено] Как хранить/создавать/изменять симметричную разряженную матрицу.

Сообщение ffldove » 15.03.2010 20:37

Изображение

Есть некоторые данный наподобие таблицы умножения, то есть:

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

ПС
В название темы таблицу назвал «вширину» не знаю как правильно назвать такова типа таблицу.
ПСПС
Как один из вариантов простого решения возможно создание отдельной таблицы для каждого столбца, но может еще как то можно?

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

Здравствуйте, 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 — одна входящая табличка — один файл (год / квартал / филиал /) — НО как то это не очень

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

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

Форум пользователей 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: Как хранить матрицу в БД

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

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

БД для массивов и матриц?

Не знает ли кто-нибудь из Вас существующих NoSQL open source распределённых БД, в первую очередь ориентированных на хранение массивов и матриц, содержащих double и int, а также с возможностью расширения функций поиска. Наличие клиентских библиотек для PHP/Python есть огромный плюс.

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

Комментировать

Решения вопроса 0

Ответы на вопрос 1

lybin

looking for remote full time job python backend

habrahabr.ru/blogs/nosql/103021/ — недавно был пост, может поможет, обзор в конце.

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

Ваш ответ на вопрос

Войдите, чтобы написать ответ

sql

  • SQL
  • +2 ещё

Как оптимальнее всего организовать хранение тяжёлых данных и чтобы потом максимально быстро доставать оттуда данные для отчётов?

  • 1 подписчик
  • 10 окт. 2023
  • 157 просмотров

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

Здравствуйте, 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 поля для матриц нет, по столбцам думал имитировать но боюсь запросы на выборку в этом случае станут слишком тяжёлыми, за ссылки отдельное спасибо, обязательно знакомлюсь.

Как сохранить матрицу в БД?

Как правильно сохранить в postgresql экземпляр вот такого класса:

@Table(name="matrix") class Matrix < @Id @GeneratedValue private Long id; private int[][] data; // getters, setters etc. >

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

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

pol01 ☆
13.02.19 20:06:03 MSK
anonymous
( 13.02.19 20:07:37 MSK )
Ответ на: комментарий от anonymous 13.02.19 20:07:37 MSK

Это я уже всё прочитал. Вопрос, как в java чтение и запись организовать.

pol01 ☆
( 13.02.19 20:08:58 MSK ) автор топика
anonymous
( 13.02.19 20:12:03 MSK )
Ответ на: комментарий от anonymous 13.02.19 20:12:03 MSK

Пример @Lob и сохранения int[][] можешь привести?

pol01 ☆
( 13.02.19 20:19:19 MSK ) автор топика
Ответ на: комментарий от pol01 13.02.19 20:19:19 MSK

Гуглится по site:github.com @Lob @Entity @Id «[][]»

Aber ★★★★★
( 13.02.19 20:39:32 MSK )

Нафига тебе [][] вообще? Матрица это простой массив int[] если не используется компрессия колонок/строк/etc

anonymous
( 13.02.19 21:51:33 MSK )
Ответ на: комментарий от Aber 13.02.19 20:39:32 MSK
pol01 ☆
( 13.02.19 22:03:30 MSK ) автор топика
Ответ на: комментарий от anonymous 13.02.19 21:51:33 MSK

А как можно свернуть и развернуть int[][] в int[] ?

pol01 ☆
( 13.02.19 22:04:27 MSK ) автор топика
Ответ на: комментарий от pol01 13.02.19 22:04:27 MSK

рядом хранить величину первой размерности, вычислять на лету вторую координату

bvn13 ★★★★★
( 13.02.19 22:07:36 MSK )

Я решал задачу хранения матницы в БД, но к сожалению у меня кода нету под рукой. Я делал все по аналогии с этой статьей https://vladmihalcea.com/how-to-map-java-and-sql-arrays-with-jpa-and-hibernate/ насколько я помню там достаточно заменить int[] на int[][] и все будет работать.

mythCreator
( 14.02.19 01:22:46 MSK )

Сериализуй в XML и храни в поле text

Legioner ★★★★★
( 14.02.19 01:34:29 MSK )
Ответ на: комментарий от Legioner 14.02.19 01:34:29 MSK

В текст согласен, но зачем такое порно с xml? Верно подсказывают — пусть просто числа в ряд, если матрица квадратная — так и подавно.

anonymous
( 14.02.19 10:44:44 MSK )

Постгрес поддерживает и одномерные, и двумерные массивы. Если массив двумерный, но элементы разного размера, можно хранить в json(b)

Выбрось недорм и аннотации, пиши на sql.

nikolnik ★★★
( 14.02.19 10:47:19 MSK )
Ответ на: комментарий от Legioner 14.02.19 01:34:29 MSK

А почему не сразу в xlsx и не хранить как бинарный блоб?

nikolnik ★★★
( 14.02.19 10:49:07 MSK )

Чтобы БД жизнь сахаром не казалась, храни каждый элемент отдельной записью. Если понадобятся разреженные матрицы, это может даже оказаться правильным решением, лол.

Алсо, у иклипслинка есть такая шляпа. Не помню, правда, из стандарта она или кастом.

Deleted
( 14.02.19 11:05:48 MSK )
Последнее исправление: Deleted 14.02.19 11:06:02 MSK (всего исправлений: 1)

Ответ на: комментарий от nikolnik 14.02.19 10:47:19 MSK

Я смотрел в сторону json(b). Как понял, там вся фишка, что можно внутри этого json искать будет. Мне этого не нужно.

pol01 ☆
( 14.02.19 11:13:52 MSK ) автор топика
Ответ на: комментарий от pol01 14.02.19 11:13:52 MSK

Фишка json(b) в том, что это json, по которому можно искать и строить индексы. Так же жсон позволяет хранить данные в произвольном порядке. Если ты в постгресе попытаешься в [][]ARRAY положить , , то оно тебе не разрешит, т.к. все массивы должны быть одинаковой длины, в случае с матрицами — это ок, в других случаях приходиться изощряться через жсон.

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

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

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

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