# [SciPy-user] the meaning of c_ and r_

Robert Kern rkern at ucsd.edu
Thu Oct 21 19:24:50 CDT 2004

Gerald Richter wrote:
> Hi everybody.
>
> Sorry for such a basic question, or maybe two:
>
> shouldn't c_[...] result in something like
> array([ [ . ],
>         [ . ] ])
> while r_ results in
> array([ ... ])
> ?

Probably. Travis will probably have to step in here and explain what
they are supposed to do in this case.

> why does:
>
> In [23]: a = r_[1:3:5j]
>
> In [24]: b = c_[2:6:5j]
>
> In [25]: b
> Out[25]: array([ 2.,  3.,  4.,  5.,  6.])
>
> In [26]: a
> Out[26]: array([ 1. ,  1.5,  2. ,  2.5,  3. ])
>
> In [27]: transpose a
> -------> transpose(a)
> Out[27]: array([ 1. ,  1.5,  2. ,  2.5,  3. ])
>
> In [28]: transpose b
> -------> transpose(b)
> Out[28]: array([ 2.,  3.,  4.,  5.,  6.])
>
> not allow transposition in the above mentioned way?

transpose(a) only flips the order of the axes. For a rank-1 array, it
just maps back to itself. Rank-1 arrays are neither strictly row-vectors
or strictly column-vectors. If you want to ensure that they are row- or
column-vectors, use the atleast_2d() function.

In [7]: a = r_[1:3:5j]

In [8]: a.shape
Out[8]: (5,)

In [9]: transpose(a).shape
Out[9]: (5,)

In [10]: c = atleast_2d(a)

In [11]: c.shape
Out[11]: (1, 5)

In [13]: transpose(c).shape
Out[13]: (5, 1)

In [14]: c
Out[14]: NumPy array, format: long
[ [ 1.   1.5  2.   2.5  3. ]]

In [15]: transpose(c)
Out[15]: NumPy array, format: long
[[ 1. ]
[ 1.5]
[ 2. ]
[ 2.5]
[ 3. ]]

> And: if I got some functions that might be useful to others, and want to
> contribute them, where do I turn to?

For batting around the issue on the mailing list, you can post them here
if they are small, or preferably put them on a website and post the url
here.

If you know where they ought to go in scipy, you can make a patch and
submit it to the issue tracker. Assign the issue to me (rkern), and I'll
make sure it gets dealt with.

http://www.scipy.net/roundup/scipy/index

> I got some interp2() function, modeled after (translated from) the octave
> algorithm, and a polyfit() more or less woven from same wool...

That's a little murky license-wise. We want to keep everything
BSD-licensed, and I assume that the original sources for these functions
are GPLed.

--
Robert Kern
rkern at ucsd.edu

"In the fields of hell where the grass grows high
Are the graves of dreams allowed to die."
-- Richard Harter