I am trying to obtain a series of vectors made of elements from a larger vector given they exceed a threshold

1 次查看(过去 30 天)
I have Z=[6 7 8 5 6 7 8 3 2 4]' vector
for i=1:10; A(i) =Z(Z>Z(i)); end
For some reason its not working

回答(2 个)

Matthew Eicholtz
Matthew Eicholtz 2016-4-5
编辑:Matthew Eicholtz 2016-4-5
The reason your code does not currently work is because you are trying to assign a vector ( Z(Z>Z(i)) ) to a scalar element in a numeric array ( A(i) ). Since the size of your vector may vary on each iteration, I suggest using a cell array.
To do this, just change A(i) to A{i}.
  3 个评论
Matthew Eicholtz
Matthew Eicholtz 2016-4-5
An alternative approach if you do not want to use a cell array is to create a logical mask as follows:
Z = [6 7 8 5 6 7 8 3 2 4]';
mask = bsxfun(@gt,Z,Z');
Then, if you want to get the elements that are greater than the 4th element, for example, use:
Z(mask(:,4))

请先登录,再进行评论。


Roger Stafford
Roger Stafford 2016-4-5
It's not clear whether you want those Z elements which exceed some fixed value or those which make up a monotone increasing sequence.
For a fixed value L:
A = Z(Z>L);
For selecting only those Z which constitute a monotone increasing sequence:
t(1) = true;
for k = 2:length(Z)
t(k) = (max(Z(1:k-1))<Z(k));
end
A = Z(t);

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by