从矩阵中删除一些行后,获取元素的新索引

时间:2012-04-01 23:49:20

标签: matlab

我有这个大小为10000的矩阵1.我想删除一些行,从随机位置说50。删除行后,矩阵的大小将为9950.那么,如何从原始10000中获取任何元素的索引。我的意思是假设我想将第9999个元素的值作为原始矩阵中的索引。但是现在因为删除了一些行后我的新矩阵的大小是9950,我怎么知道哪个是原始矩阵中的第9999个元素。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

所以你想随机缩小矩阵,但是还记得每个元素的来源吗?并知道原始元素的最终位置?一种方法是保留一个索引来记住收缩矩阵中的元素来自何处。

假设您的原始矩阵是

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将为空。

答案 1 :(得分:0)

通常一旦你有要删除的元素索引,你就可以同时删除它们。例如,让我们生成10000个向量A中的50个元素的随机索引。

rp_idx = randperm(numel(A));
rp_idx_50 = rp(1:50);

然后我们可以将这50个元素删除为

A(rp_idx_50) = [];

如果由于某种原因必须逐个删除元素,请对索引进行排序并从结尾开始。在这种情况下,您不必找到新索引。