MATLAB, separate odds and evens from matrix

  • Thread starter Thread starter Feodalherren
  • Start date Start date
  • Tags Tags
    Matlab Matrix
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
5 replies · 4K views
Feodalherren
Messages
604
Reaction score
6

Homework Statement



Given variable b that contains a row vector of length 10, assign the contents of the odd indeces in b to variable odd , and assign the contents of the even indeces of b to variable even.

Examples:

Input b = [8 -3 0 7 -6 -3 1 8 7 -2]
Output odd = [8 0 -6 1 7]
even =[-3 7 -3 8 -2]

Homework Equations

The Attempt at a Solution



b is some arbitrary matrix

O = mod(b,2);
odd = b(O)E = ~mod(b,2);
even = b(E)

What's weird is that it works for b(E) but b(O) yields and error: Subscript indices must either be real positive integers or logicals.
 
Physics news on Phys.org
I am not sure that mod is the best command to use for this purpose. You are just looking to split the matrix into 2 parts based on whether or not the index is odd or ever, right?
You essentially want something that looks like:
b = [8 -3 0 7 -6 -3 1 8 7 -2];
O=[1,3,5,7,9];
E=[2,4,6,8,10];
odd = b(O)
even=b(E)
The mod function was returning a logical index of whether or not the value was odd or even.
 
But it has to be true for any arbitrary matrix of any length of numbers :/.
 
Feodalherren said:
But it has to be true for any arbitrary matrix of any length of numbers :/.
You want to generate the sequences 1,3,5,... and 2,4,6,... to use as indices for your matrix. Do you know of any easy way to do that in MATLAB? Hint: The colon operator.
 
  • Like
Likes   Reactions: Feodalherren
For arbitrary length arrays, you can call length(b) to get your ending value. Or as milesyoung said, it might be more straightforward to use odd = b([1:2:end]) to count by twos using the colon.
 
  • Like
Likes   Reactions: Feodalherren
Ah ok, got it. Thanks!