matlab — взаимная корреляция двух строк в переполнении стека

Предположим, у меня есть две матрицы 1 и 0. Я хочу сохранить его как bool Matrix но opencv не хранится таким образом, вместо этого он хранится как uchar Mat, Поэтому мое пространство увеличится в 8 раз. (каждый элемент 8 бит вместо 1 бита).

Мой код в основном выглядит следующим образом:

Mat mat1, mat2; //I want each index to be 1 bit
load(mat1);     //data size is not important in memory
load(mat2);
corr2(mat1, mat2); //this corr2 is same as Matlab's cross correlation.

Я делаю эту часть 10 миллионов раз. Поэтому загрузка занимает так много времени. Мои матрицы 1K * 1K, поэтому я могу хранить их как 1 МБ, но я хочу, чтобы они были 128 КБ (Matlab хранит примерно 178 КБ).

Вот мой вопрос: я хочу хранить свои матрицы как string и вместо Mat операция, я хочу использовать строку.

Например, размер mat1 and mat2 является 2 * 8.

MAT1:

0 1 0 0 0 0 1 0 (66=B)
0 1 1 1 0 1 1 1 (122=y)

MAT2:

0 1 0 0 0 0 1 1 (67=C)
0 1 1 1 1 0 0 0 (122=z)

Я буду хранить str1=By а также str2=Cz

Есть ли способ взаимной корреляции str1, str2?

Заранее спасибо,

0

Решение

Замечания: Это не ответ, а скорее длинный комментарий. Я выкладываю это как ответ, чтобы избежать спама в разделе комментариев OP.

Хранение элементов 1M числового типа никогда не будет проблемой на любом современном компьютере.

Вы должны узнать немного больше о C и памяти; bool не элементарный тип, поэтому хранение bool существует только виртуально. Упаковка нескольких битов в char — это хорошая идея, но вы должны взглянуть на C ++. BitSet если вы хотите быть эффективным.

Поймите, что может существовать существенная разница между способом хранения данных на жестком диске и форматом, который лучше всего подходит для обработки активной памяти (например, ОЗУ). Это, вероятно, причина нечетного размера хранилища Matlab; хранение дополнительной информации и / или, казалось бы, неэффективных блоков хранения часто желательно, чтобы облегчить написание алгоритмов, а элементарные операции выполняются быстрее на CPU.

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

0

Другие решения