Tuesday, March 3, 2009

Vectors and Matrices - 4

I think this is the last basic post about vectors and matrices.

Let's do logic operations with vectors and matrices.

Our example uses more common informations.

We have a vector and each element is the height of a person (in meters).

v = [1.55 1.82 1.48 1.71 1.62 1.94 2.00]'

Now, we need to know who is taller than 1.80m.

So, we can do an analysis element by element, like this:

v(1) > 1.80
v(2) > 1.80
v(3) > 1.80
v(4) > 1.80
v(5) > 1.80
v(6) > 1.80
v(7) > 1.80

But, the Scilab has a very simple solution.

v > 1.8 // this operation is non-dependent of vector's dimensionality

Look the script.

-->v = [1.55 1.82 1.48 1.71 1.62 1.94 2.00]'
v =

1.55
1.82
1.48
1.71
1.62
1.94
2.

-->v > 1.8
ans =

F
T
F
F
F
T
T

But, if we want the positions of the elements (people) taller than 1.80m then we can do this:

-->positions = find(v > 1.8)
positions =

2. 6. 7.


The elements in v these are taller than 1.8m are the 2nd (1.82m), 6th (1.94m) and 7th (2.00m).

We can do the same analysis for matrices.

A very useful example is a binary matrix with equal probability of zeros and ones.

Look the script and post to me your comments.

-->x = rand(3, 3)
x =

0.5667211 0.0568928 0.7279222
0.5711639 0.5595937 0.2677766
0.8160110 0.1249340 0.5465335

-->y = x > 0.5
y =

T F T
T T F
T F T

In showed example we have more ones ("Trues"), I ask: why?

3 comments:

Peter said...

a = [ 1 2 3 4 11 20 10 ]
b = a>9

What is the smart way of subtract 10 from each column that has a value over 9? I'm looking for a matrice operation to avoid loops... Is it possible?

Thank you!

Alex Carneiro said...

Hello Peter, you can try something like this:

a = [ 1 2 3 4 11 20 10 ];

aux_positions = find(a > 9);

b = a(aux_positions);

b = b - 10;

a(aux_positions) = b;


Best regards.

Peter said...

Hi Alex! This is a great solution. Thank you very much!