2012-04-01 35 views
0

我有這個矩陣的大小10000乘1.我想刪除一些行讓我們從任意位置說50。刪除行後,矩陣的大小將是9950.那麼,我怎樣才能從原始的10000獲得任何元素的索引。我的意思是我想要得到第9999th元素的值作爲原始矩陣中的索引。但是現在由於在刪除一些行後我的新矩陣的大小爲9950,我怎麼知道哪一個是原始矩陣的第9999個元素。做這個的最好方式是什麼?從矩陣中刪除一些行後獲取元素的新索引

+0

這取決於你如何刪除行 - 你能否提供一小段代碼(可重現)來演示如何創建矩陣以及如何決定刪除哪些行以便我們解決它?乾杯。 – 2012-04-01 23:52:29

+0

我想通了。我可以使用原始索引 - 刪除的元素數量來獲取新矩陣中元素的索引。 – 2012-04-02 00:45:58

+0

不,你不能。如果原始索引是(比如說)40,那麼減去刪除的數字(50)就是-10,這不是一個有效的索引。你必須減去被刪除的元素的數量*直到原來的索引(所以,你應該存儲你刪除的元素的索引)。 – 2012-04-02 00:59:53

回答

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將爲空。

0

通常一旦你有要刪除的元素的索引,你同時刪除它們全部。例如,讓我們從10000個矢量A中生成50個元素的隨機索引。

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

然後我們就可以刪除這些50個元素

A(rp_idx_50) = []; 

如果您由於某種原因需要刪除的元素一個接一個,排序指標,並從月底開始。在這種情況下,您不必查找新的索引。

相關問題