Fast way to delete the last n rows of a matrix

32 ビュー (過去 30 日間)
Andrew
Andrew 2011 年 5 月 20 日
コメント済み: Walter Roberson 2020 年 3 月 7 日
Hi,
I would like to be able to delete the last n rows of a matrix. I have found that this can be done in the following way. For example, suppose I want to delete the last two rows of a matrix:
tst=[1 1 1; 2 2 2; 3 3 3];
lastn=2;
tic
tst((end-(lastn-1)):end,:)=[];
toc
This works, but it seems quite expensive: "Elapsed time is 0.001152 seconds." In my code, I will be deleting rows many hundreds of thousands of times. Do you know if there is a faster way to delete the last n rows of a matrix?
Thank you.
Andrew DeYoung
Carnegie Mellon University

採用された回答

Sean de Wolski
Sean de Wolski 2011 年 5 月 20 日
tst = tst(1:end-lastn,:); %glass half full
No guarantees it'll be faster. The typical goal here is just minimize the number of matrix resizing operations you have to do.
  3 件のコメント
Hafsa Arif
Hafsa Arif 2020 年 3 月 7 日
is this making a new one? informmation will be lost or get arranged in the matrix?
Walter Roberson
Walter Roberson 2020 年 3 月 7 日
Newtst = tst(1:end-lastn,:); %glass half full
If you want to keep the old matrix. With Sean's version to write to tst then the last rows would be thrown away.

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2011 年 5 月 20 日
Andrew, could you transpose so that you are deleting columns instead of rows? If you do that then the portion that is left behind is contiguous in memory, and it should be faster to work with that than to have to copy over each partial column as you delete rows.
  3 件のコメント
Walter Roberson
Walter Roberson 2011 年 5 月 20 日
Correct. MATLAB arranges memory in columns and the first entry for the next column is stored in memory directly after the last entry for this column. Therefor if you are keeping entire columns then the block of memory that needs to be copied to the new array is arranged sequentially in memory and can just be described as "starting address" and "number of items to copy". Especially for larger blocks, there are often ways to optimize that at the machine level, such as by copying full system "pages" of memory using DMA.
Andrew
Andrew 2011 年 5 月 20 日
Thank you so much. I really appreciate your taking the time to explain this to me. I will be able to use in the future what you have taught me.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeEnvironment and Settings についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by