Создать новую матрицу из индексов
У меня огромная матрица 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
,