Это если мой первый пост, я надеюсь, что я буду отвечать стандартам ...Как получить доступ к нескольким элементам массива эффективно на C++?
я перевожу в C++ (в которой я совершенно новый) программа написана в MATLAB по причинам эффективности. Часть кода, на которой я фактически работаю, возобновляет доступ к различным индексам вектора (матрицы) за один шаг. Например, если M1 представляет собой матрицу размером, скажем, 10х15, программа будет определять новый следующим образом:
idxs1 = [1 2 3];
idxs2 = [1 2 3 4 5];
M2 = M1 (idxs1 , idxs2);
в результате M2 в виде матрицы размером 3х5. Теперь, я думаю, что MATLAB на самом деле это один за другим доступ к различным местам M1, заданный индексами, а затем построение M2 путем переустановки большого количества содержимого, полученного очень эффективно.
Мой вопрос в том, как я могу воспроизвести такой механизм в C++? Насколько я знаю, нет прямого способа доступа к ряду различных индексов массива, а цикл for
, который я использую, кажется довольно громоздким. Может быть, есть разумный способ сделать это, не требуя «слишком много» процессорного времени? Кроме того, ради образовательных целей, я был бы признателен, если бы кто-нибудь мог объяснить, что на самом деле делает MATLAB, когда такая операция выполняется.
Спасибо заранее и извините за возможные неудобства!
P.S: На всякий случай он добавляет что-либо к вопросу, я работаю с MEX файлы для связи обоих языков. P.S2: Кстати, я нашел некоторые смежные вопросы, но в отношении других языков:
Вам будет очень сложно улучшить эффективность Matlab. – 1201ProgramAlarm
Почему вы думаете, что было бы легко победить Matlab с точки зрения эффективности? Matlab в основном использует [BLAS] (http://www.netlib.org/blas/) и [LAPACK] (http://www.netlib.org/lapack/) для операций с матрицами. Эти библиотеки были первоначально написаны в fortran. Вы можете использовать эти функции, используя некоторые [c wrappers] (http://se.mathworks.com/help/matlab/matlab_external/calling-lapack-and-blas-functions-from-mex-files.html). Matlab также использует матричный тип mxArray. Возможно, я использую другие матричные библиотеки, но вы должны избегать писать все самостоятельно, если только вы не скучаете по математике. – patrik
Библиотека библиотеки C++ с [несмежными представлениями подматрицы] (http://arma.sourceforge.net/docs.html#submat). также имеет интерфейс MEX – hbrerkere