Мой код в 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? Я использовал контейнеры для хранения ввода как ключа, а результат в качестве значения. Но наличие огромной двоичной строки в качестве ключа не было настолько эффективным.
Сообщите мне, если вам нужны какие-либо разъяснения.
Для каждого элемента массива структур каждое поле является указателем, то есть данные не организованы в непрерывной памяти. Это может сделать доступ медленным. Вы можете переосмыслить, как организованы ваши данные, и использовать логическую матрицу вместо структуры или двойную матрицу с NaN для заполнения. – siliconwafer
каждая строка, скажем, имеет другой размер .. как вы можете это сделать? – JustCurious
Если максимальная длина ваших последовательностей достаточно мала, вы можете создать логический массив '100 x Max' и вектор соответствующих допустимых длин. – beaker