В основном я выполняю приведенный ниже код в цикле, чтобы вытащить указанный столбец в матрице. У меня такое чувство, что именно здесь происходит узкое место в моей петле. Я чувствую, что есть более простой способ сделать это, например, матричную арифметику, но в данный момент я ничего не могу придумать. Функция ниже примет аргумент 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
Вы пробовали использовать 'arrayOUTPUT = matINPUT (:, colnum)', где 'colnum' является номер столбца, который вы хотите выбрать? ':' выберет все строки в 'colnum', что означает весь столбец. Я думаю, что это должно быть довольно быстро, потому что MATLAB является основным столбцом. Вам также не нужно выделять, если вы это делаете. – Justin
Yep @jucestain Я идиот. Натуральное решение было тем, о чем я думал. Однако, к сожалению, это только, кажется, сбрил секунду на каждые 10 тыс. Итераций, а не 4-5, на которые я надеялся. Благодаря! – AlexCU