2013-08-16 5 views
0

В основном я выполняю приведенный ниже код в цикле, чтобы вытащить указанный столбец в матрице. У меня такое чувство, что именно здесь происходит узкое место в моей петле. Я чувствую, что есть более простой способ сделать это, например, матричную арифметику, но в данный момент я ничего не могу придумать. Функция ниже примет аргумент matINPUT как большую матрицу, а INPUT - как целочисленное смещение нужного столбца. Результаты помещаются в arrayOUTPUT для использования в другом месте программы.Каков самый быстрый способ получить столбец в переменной из очень большого массива (> 1 ГБ) в Matlab?

// Get size and offset of matrix 
[matOffset, matSize] = size(matINPUT); 

// Test if INPUT isnt out of bounds, and return 0 if it is 
if INPUT > matSize then 
    arrayOUTPUT = [0] 
    return 
end 

// pre-load array for correct size 
arrayOUTPUT = zeros(matOffset,1) // generates the correct array size 

// iterate through all slots and populate 
for x = 1:matOffset 
    arrayOUTPUT(x) = matINPUT(x + (INPUT - 1)*matOffset) 
end 
+1

Вы пробовали использовать 'arrayOUTPUT = matINPUT (:, colnum)', где 'colnum' является номер столбца, который вы хотите выбрать? ':' выберет все строки в 'colnum', что означает весь столбец. Я думаю, что это должно быть довольно быстро, потому что MATLAB является основным столбцом. Вам также не нужно выделять, если вы это делаете. – Justin

+0

Yep @jucestain Я идиот. Натуральное решение было тем, о чем я думал. Однако, к сожалению, это только, кажется, сбрил секунду на каждые 10 тыс. Итераций, а не 4-5, на которые я надеялся. Благодаря! – AlexCU

ответ

0

Из последней части вашего кода это выглядит как часть выбора матрицы. Я полагаю, вы можете использовать вектор индекса для получения значений без использования для цикла

(Надеюсь, что это может помочь)