У меня есть огромная матрица MxN
матрицу, скажем, A=rand([M,N]);
и вектор индекса с N
целочисленных значений между 1
и M
, скажем, RandomIndex = randi(M,[1,N]);
.Доступ к списку записей в MATLAB
Теперь я хотел бы, чтобы сгенерировать вектор-строку с элементами
result = [A(RandomIndex(1),1), A(RandomIndex(2),2), ..., A(RandomIndex(N),N)]
Что бы быть эффективным способом сделать это? Это должна быть очень дешевая операция, но все мои реализации медленны. Я не думаю, что в Matlab есть обозначение, чтобы сделать это прямо, не так ли?
Самый быстрый вариант до сих пор является
indexFunction = @(r,c) A(r,c);
result = cell2mat(arrayfun(indexFunction,RandomIndex,1:N,'UniformOutput',false));
Есть ли более эффективный способ?
Плюс 1 для того, чтобы быть первым ** правильным ** ответом на эту проблему. – rayryeng
Оказывается, что репликация sub2ind для этого частного случая выполняется еще быстрее, то есть 'A (M * (0: (N-1)) + RandomIndex)' – Julian