# MATLAB, separate odds and evens from matrix

## 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]

## 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.

## Answers and Replies

RUber
Homework Helper
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 :/.

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.

Feodalherren
RUber
Homework Helper
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.

Feodalherren
Ah ok, got it. Thanks!