MATLAB, separate odds and evens from matrix

  • Thread starter Thread starter Feodalherren
  • Start date Start date
  • Tags Tags
    Matlab Matrix
AI Thread Summary
To separate odd and even indexed elements from a row vector in MATLAB, the discussion highlights the need to use indexing rather than the mod function, which is not suitable for this purpose. The correct approach involves generating sequences of indices for odd and even positions using the colon operator, such as odd = b(1:2:end) and even = b(2:2:end). The mod function returns logical indices based on values rather than positions, leading to errors when used for indexing. Participants suggest using the length of the vector to accommodate arbitrary lengths. This method effectively splits the matrix into two parts based on index parity.
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 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 Feodalherren
Ah ok, got it. Thanks!
 
Back
Top