# [Numpy-discussion] vectorizing

Brian Blais bblais at bryant.edu
Fri Jun 5 14:07:42 EDT 2009

```Hello,

I have a vectorizing problem that I don't see an obvious way to
solve.  What I have is a vector like:

obs=array([1,2,3,4,3,2,1,2,1,2,1,5,4,3,2])

and a matrix

T=zeros((6,6))

and what I want in T is a count of all of the transitions in obs,
e.g. T[1,2]=3 because the sequence 1-2 happens 3 times,  T[3,4]=1
because the sequence 3-4 only happens once, etc...  I can do it
unvectorized like:

for o1,o2 in zip(obs[:-1],obs[1:]):
T[o1,o2]+=1

which gives the correct answer from above, which is:

array([[ 0.,  0.,  0.,  0.,  0.,  0.],
[ 0.,  0.,  3.,  0.,  0.,  1.],
[ 0.,  3.,  0.,  1.,  0.,  0.],
[ 0.,  0.,  2.,  0.,  1.,  0.],
[ 0.,  0.,  0.,  2.,  0.,  0.],
[ 0.,  0.,  0.,  0.,  1.,  0.]])

but I thought there would be a better way.  I tried:

o1=obs[:-1]
o2=obs[1:]
T[o1,o2]+=1

but this doesn't give a count, it just yields 1's at the transition
points, like:

array([[ 0.,  0.,  0.,  0.,  0.,  0.],
[ 0.,  0.,  1.,  0.,  0.,  1.],
[ 0.,  1.,  0.,  1.,  0.,  0.],
[ 0.,  0.,  1.,  0.,  1.,  0.],
[ 0.,  0.,  0.,  1.,  0.,  0.],
[ 0.,  0.,  0.,  0.,  1.,  0.]])

Is there a clever way to do this?  I could write a quick Cython
solution, but I wanted to keep this as an all-numpy implementation if
I can.

thanks,

Brian Blais

--
Brian Blais
bblais at bryant.edu
http://web.bryant.edu/~bblais

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20090605/9a4e3e88/attachment.html>
```