How can I select particular elements by an increasing step in rows?
3 次查看(过去 30 天)
显示 更早的评论
10 20 30
11 21 31
12 22 32
13 23 33
14 24 34
15 25 35
16 26 36
17 27 37
18 28 38
19 29 39
For example: I'd like to extract 4 elements in each column from the matrix above. Extracted elements would be (1,1),(2,1),(3,1),(4,1) for the 1st column, and (1,2),(3,2),(5,1),(7,1) for the 2nd column, and (1,3),(4,3),(7,3),(10,3). Example out is given below:
10 20 30
11 22 33
12 24 36
13 26 39
Note: I have hundreds of rows and columns. So, I need a generic solution.
Thank you.
采纳的回答
Stephen23
2018-4-18
编辑:Stephen23
2018-4-18
This is easy using linear indexing (a loop is not required):
>> [M(1:10:end);M(2:11:end);M(3:12:end);M(4:13:end)] ans = 10 20 30 11 22 33 12 24 36 13 26 39
Note that M has 10 rows, so you can easily adjust the code I gave to work for any number of rows:
>> S = size(M,1); >> [M(1:S+0:end);M(2:S+1:end);M(3:S+2:end);M(4:S+3:end)] ans = 10 20 30 11 22 33 12 24 36 13 26 39
Note that this method only works if the number of columns is <= the number of rows.
To adjust for N elements from each column you can add a loop, either following the method above:
N = 4; Y = nan(N,size(M,2)); S = size(M,1); for k = 1:N Y(k,:) = M(k:S+k-1:end); end
or doing a naive implementation of what you explained in your question.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!