[Numpy-svn] r3150 - in trunk/numpy/lib: . tests

numpy-svn at scipy.org numpy-svn at scipy.org
Wed Sep 13 21:34:05 CDT 2006


Author: oliphant
Date: 2006-09-13 21:33:55 -0500 (Wed, 13 Sep 2006)
New Revision: 3150

Modified:
   trunk/numpy/lib/function_base.py
   trunk/numpy/lib/index_tricks.py
   trunk/numpy/lib/tests/test_index_tricks.py
Log:
Fix up r_ so you can specify the minimum number of dimensions to force arrays to and allow alteration of the concatenation axis and whether or not to transpose 1d arrays

Modified: trunk/numpy/lib/function_base.py
===================================================================
--- trunk/numpy/lib/function_base.py	2006-09-14 01:49:10 UTC (rev 3149)
+++ trunk/numpy/lib/function_base.py	2006-09-14 02:33:55 UTC (rev 3150)
@@ -103,7 +103,7 @@
     else:
         return n, bins
 
-def  histogramnd(sample, bins=10, range=None, normed=False):
+def histogramnd(sample, bins=10, range=None, normed=False):
     """histogramnd(sample, bins = 10, range = None, normed = False) -> H, edges
     
     Return the N-dimensional histogram computed from sample.

Modified: trunk/numpy/lib/index_tricks.py
===================================================================
--- trunk/numpy/lib/index_tricks.py	2006-09-14 01:49:10 UTC (rev 3149)
+++ trunk/numpy/lib/index_tricks.py	2006-09-14 02:33:55 UTC (rev 3150)
@@ -10,7 +10,7 @@
 import sys
 import types
 import numpy.core.numeric as _nx
-from numpy.core.numeric import asarray, ScalarType
+from numpy.core.numeric import asarray, ScalarType, array
 
 import function_base
 import numpy.core.defmatrix as matrix
@@ -207,6 +207,8 @@
         self.col = 0
 
     def __getitem__(self,key):
+        trans1d = False
+        ndmin = 1
         if isinstance(key, str):
             frame = sys._getframe().f_back
             mymat = matrix.bmat(key,frame.f_globals,frame.f_locals)
@@ -230,22 +232,47 @@
                     newobj = function_base.linspace(start, stop, num=size)
                 else:
                     newobj = _nx.arange(start, stop, step)
-            elif type(key[k]) is str:
-                if (key[k] in 'rc'):
+                if ndmin > 1:
+                    newobj = array(newobj,copy=False,ndmin=ndmin)
+                    if trans1d:
+                        newobj = newobj.T
+            elif isinstance(key[k],str):
+                if k != 0:
+                    raise ValueError, "special directives must be the"\
+                          "first entry."
+                key0 = key[0]
+                if key0 in 'rc':
                     self.matrix = True
-                    self.col = (key[k] == 'c')
+                    self.col = (key0 == 'c')
                     continue
+                if ',' in key0:
+                    vec = key0.split(',')
+                    try:
+                        self.axis, ndmin = \
+                                   [int(x) for x in vec[:2]]
+                        if len(vec) == 3 and vec[2] == 't':
+                            trans1d = True
+                        continue
+                    except:
+                        raise ValueError, "unknown special directive"
                 try:
                     self.axis = int(key[k])
                     continue
                 except (ValueError, TypeError):
                     raise ValueError, "unknown special directive"
             elif type(key[k]) in ScalarType:
-                newobj = asarray([key[k]])
+                newobj = array(key[k],ndmin=ndmin)
                 scalars.append(k)
                 scalar = True
             else:
                 newobj = key[k]
+                if ndmin > 1:
+                    tempobj = array(newobj, copy=False, subok=True)
+                    newobj = array(newobj, copy=False, subok=True,
+                                   ndmin=ndmin)
+                    if trans1d and tempobj.ndim == 1:
+                        newobj = newobj.T
+                    del tempobj
             objs.append(newobj)
             if isinstance(newobj, _nx.ndarray) and not scalar:
                 if final_dtypedescr is None:
@@ -286,13 +313,13 @@
 class c_class(concatenator):
     """Translates slice objects to concatenation along the second axis.
 
-       This is deprecated.  Use r_[...,'-1']
+       This is deprecated.  Use r_['-1',...]
     """
     def __init__(self):
         concatenator.__init__(self, -1)
 
     def __getitem__(self, obj):
-        warnings.warn("c_ is deprecated use r_[...,'-1']")
+        warnings.warn("c_ is deprecated use r_['-1',...]")
         return concatenator.__getitem__(self, obj)
 
 c_ = c_class()

Modified: trunk/numpy/lib/tests/test_index_tricks.py
===================================================================
--- trunk/numpy/lib/tests/test_index_tricks.py	2006-09-14 01:49:10 UTC (rev 3149)
+++ trunk/numpy/lib/tests/test_index_tricks.py	2006-09-14 02:33:55 UTC (rev 3150)
@@ -39,7 +39,7 @@
     def check_2d(self):
         b = rand(5,5)
         c = rand(5,5)
-        d = r_[b,c,'1']  # append columns
+        d = r_['1',b,c]  # append columns
         assert(d.shape == (5,10))
         assert_array_equal(d[:,:5],b)
         assert_array_equal(d[:,5:],c)



More information about the Numpy-svn mailing list