Выберите какой-либо элемент ячейки по индексу - быстрее, чем для структуры - PullRequest
0 голосов
/ 23 мая 2011

несколько маленьких вопросов!

  1. Как создать пустую N-N-ячейку в Matlab?
  2. У меня матрица N-3

rv=... %# [N-by-3]

r=sqrt(sum(rv,2).^2); if r < b

statement1

end

Оператор сохраняет индекс r в векторе (например, C). Примерно так: C = [1 3 4 7 9,…] Используя этот вектор, я хочу выбрать некоторый элемент матрицы N-N-N Каждый элемент 2D-матрицы имеет 2 индекса: (i, j). Если они оба находятся в векторе индексов (C), выберите его и сохраните его индекс в ячейке. Примерно так: D = {[2x1] [2x1]…} Большое спасибо за любое руководство. Whishes

=============================================== ==================================

Для второго:

p=1
for i=1:N
    if r(i)<R
        L(p)=i;
        p=p+1;
    end
end


L=[.....];

for i=1:length(L)
    for j=1:length(L)
        D{i,j}=C{L(i),L(j)};
    end
end

но проблема в том, что он имеет структуру for и очень медленный. Я ищу что-то быстрее. возможно с combnk

1 Ответ

1 голос
/ 06 марта 2015

Не уверен, понял ли я ваш вопрос. Но здесь я иду.

Сначала я бы конвертировал индексы L из индексов в индексы с sub2ind . Затем вы можете использовать полученные индексы для генерации векторизованной версии D и использовать reshape, чтобы получить окончательную версию N-D, которую вы хотите. Что-то вроде:

LInd = sub2Ind(size(C), L, L)
Dvect = C(LInd);
D = reshape(D, Shape_I_Want);

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

...