Создать новую матрицу из индексов

У меня огромная матрица n×n Aи индексы его ненулевых элементов по a = find(A), Я получил новый список a1 удалив некоторые элементы из a, Я хочу иметь матрицу A индексов в a1 без использования петель. Какие-либо предложения? Есть ли какая-либо функция для этого?

2 ответа

Решение

Учитывая, что ваша матрица "огромна" (и ваш вопрос подразумевает, что она в основном равна нулю), возможно, было бы лучше, если бы вы представляли ее как разреженную матрицу:

[ii, jj] = ind2sub(size(A), a1);
spA = sparse(ii, jj, A(a1), size(A, 1), size(A, 2));

При работе с разреженными матрицами может быть значительное ускорение. Если вам нужно получить полную матрицу обратно, используйте full:

newA = full(spA);

Используйте векторную индексацию. Не зная, насколько "огромна" ваша матрица A, но при условии, что вы все еще можете обработать его одним куском в памяти Matlab, просто:

B(size(A,1),size(A,2))=0;
B(a1)=A(a1);

Сейчас B такой же как A только с указанными индексами a1,

Другие вопросы по тегам