1

Мой код в Matlab работает очень медленно, и одна из основных причин заключается в том, что я не использую свойства проблемы, чтобы ускорить работу. Когда я пытаюсь это сделать, я в конечном итоге делаю код более тяжелым и замедляю время выполнения еще больше. Проблема заключается в следующем.Memoization in Matlab

Представьте матрицу структуры, содержащую несколько элементов, например 100, то есть my_structure(1).sequence, до my_structure(100).sequence. Каждая из этих записей содержит последовательность нулей и единиц потенциально различной длины, то есть my_structure(1).sequence=[0 0 1 0], my_structure(2).sequence=[0 1 1 0 0 0 1] и т. Д. Каждый из них используется как входной сигнал, например, операция черного ящика, но my_structure(2).sequence', for example, will make use of all the previous structures ( my_structure (1) .sequence '). В моей проблеме, я попробовать различные комбинации этих структурных массивов, и это то, что происходит в основном в пределах моих петель:

#iteration 1 
my_structure(1).sequence=[0 0 0 0] 
my_structure(2).sequence=[0 0 0 0 0 0 0] 
... 
my_structure(100).sequence=[0 0 0 0 1] 

#iteration 2 
my_structure(1).sequence=[0 0 0 0] 
my_structure(2).sequence=[0 0 0 0 0 0 0] 
... 
my_structure(100).sequence=[0 0 0 1 0] 

Но, во второй итерации я пересчитывая все от 1-100 в то время как я мог бы просто повторно использовать знания из предыдущих итераций и рассчитать только обновленную версию my_structure(100).sequence. Есть ли простой и эффективный способ добиться такого поведения в Matlab? Я использовал контейнеры для хранения ввода как ключа, а результат в качестве значения. Но наличие огромной двоичной строки в качестве ключа не было настолько эффективным.

Сообщите мне, если вам нужны какие-либо разъяснения.

+1

Для каждого элемента массива структур каждое поле является указателем, то есть данные не организованы в непрерывной памяти. Это может сделать доступ медленным. Вы можете переосмыслить, как организованы ваши данные, и использовать логическую матрицу вместо структуры или двойную матрицу с NaN для заполнения. – siliconwafer

+0

каждая строка, скажем, имеет другой размер .. как вы можете это сделать? – JustCurious

+0

Если максимальная длина ваших последовательностей достаточно мала, вы можете создать логический массив '100 x Max' и вектор соответствующих допустимых длин. – beaker

ответ

1

Если вам необязательно использовать структуру, вы можете использовать ячейки, вместо этого позволяя ускорить работу. Обратите внимание на фигурные скобки:

my_structure{1} = [0 0 0 0] 
my_structure{2} = [0 0 0 0 0 0 0] 
... 
my_structure{100} = [0 0 0 0 1] 
+0

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