在列行提取物序列(MATLAB)

问题描述 投票:0回答:3

我试图从数据的MATLAB一列中提取行的序列。例如,我的数据是这样的一列:

10 
20 
30 
40 
50 
60 
70 
80 
90 
100 
110 
120 
130

我想选择的行的序列,并且这些行中的列向量A看起来像这样提取第一3行跳过2列,然后选择下一个3行和跳过两行和选择下一个3到的结束之后存储柱。

最后,数据应该像这样与9 rows and 1 column

10 
20
30
60 
70 
80
110 
120
130

谢谢!

matlab row sequence
3个回答
2
投票

x = [10 20 30 40 50 60 70 80 90 100 110 120 130].'; %'// data
m = 3; %// keep
n = 2; %// skip

然后

y = x(mod(0:end-1,m+n)<=m-1);

或等价

y = x(mod(0:numel(x)-1,m+n)<=m-1);

这是如何工作:生成序列0,1,2,... numel(x)-1。每个数字对应于x的位置。为了保持m和循环跳过n,应用mod(...,m+n)到该序列。例如,对于m=3n=2结果是序列0,1,2,3,4,0,1,2,...。然后,选择这些数字(即x的,相应的条目),它们<=m-1。这将导致周期性模式“保持,坚持,坚持,跳过,跳过”。


到第一跳过,然后保持(从上面反向):刚刚反转不等式:

y = x(mod(0:end-1,m+n)>=m-1);

要么

y = x(mod(0:numel(x)-1,m+n)>=m-1);

1
投票

试试这个,假设a是你的输入列向量 -

r_accept = 3; %// number of rows to accept
r_reject = 2; %// number of rows to reject

ind1 = bsxfun(@plus,1:r_accept+r_reject:numel(a),[0:r_accept-1]') %//'
out = a(ind1(ind1(:)<=numel(a))) %// desired output

0
投票

我只是想出了另一种方式来恭维使用find功能很好的解决方案。

如果我的数据是:

x = [10; 20; 30; 40; 50; 60; 70; 80; 90; 100; 110; 120; 130]

我要提取的行的重复序列,则: 开发的重复图案或保持(3)和跳过(2)行的行序列的索引。我的指标是,那么:

index = [1:5 1:5 1:5] 

要么

index = 123451234512345  

然后使用find功能逻辑指数“保持”序列。

a = find(index<4)

这使:

a = 1 2 3 6 7 8 11 12 13  

然后:

b = x(a) 

产生

b = 10 20 30 60 70 80 110 120 130
© www.soinside.com 2019 - 2024. All rights reserved.