Эффективный доступ элементов в Matrix в Matlab - PullRequest
1 голос
/ 26 ноября 2011

У меня есть матрица целых чисел m x n, где n - довольно большое число m и n ~ 1000. Я хочу перебрать все это и выполнить некоторые операции, например, получить доступ к определенной ячейке и присвоить значение определенной ячейке.

Однако, по крайней мере, в моей реализации, это довольно неэффективно, поскольку у меня есть два цикла for с Matrix (a, b) = Matrix (a, b + 1) или что-то в этом роде. Есть ли другой способ сделать это, видя, как моей текущей реализации требуется много времени, чтобы пройти около 100 000 ячеек и выполнить некоторые операции.

Спасибо

Ответы [ 3 ]

1 голос
/ 26 ноября 2011

В matlab почти всегда можно избежать циклов. Если вы хотите сделать Matrix(a,b)=Matrix(a,b+1), вы должны просто сделать Matrix2=Matrix(:,2:end);

Если вы будете более точны в том, что вы делаете внутри цикла, я могу вам помочь.

0 голосов
/ 27 ноября 2011

Если вы не можете избавиться от циклов for, одной из возможностей будет переписать дорогостоящие операции в C и создать MEX-файл, как описано здесь .

0 голосов
/ 26 ноября 2011

Matlab использует основной порядок столбцов матриц в памяти (в отличие от C).Вы уверены, что итерируете индексы в правильном порядке?Если нет, попробуйте переключить их и посмотреть, улучшится ли производительность ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...