То есть вы хотите уменьшить матрицу случайным образом, но все еще помните, откуда появился каждый элемент? И знаете, где оригинальные элементы оказались? Один из способов сделать это - сохранить индекс, который запоминает, откуда пришли элементы в сжатой матрице.
Допустим, ваша исходная матрица
A = rand(10000,1);
Индекс, который запоминает, откуда взялись эти элементы:
A_idx = [1:length(A)]';
Теперь, заимствуя у @yuk, давайте случайным образом удалим некоторые элементы:
rp_idx = randperm(numel(A));
kill = rp_idx(1:50);
A(kill) = [];
A_idx(kill) = [];
Теперь, сколько бы раз вы ни выполняли эту процедуру и не удаляли элементы, исходное местоположение A(i)
было A_idx(i)
.
И k-й элемент исходной матрицы теперь можно найти по адресу
new_idx = find( A_idx == k )
в новой уменьшенной матрице. Обратите внимание, что new_idx
будет пустым, если искомый элемент является одним из тех, которые были удалены.