I'm trying to slice a 2D array using coordinates given by another array. 

Example : 

def example(p, Q):                                               
    a = T.tensor4('a')                                            
    q = T.matrix('q')                                             
                                                                  
    b = q[:, 0]                                                   
    c = q[:, 1]                                                   
                                                                  
    b_i = T.cast(b, 'int32')                                      
    c_i = T.cast(c, 'int32')                                      
                                                                  
    d, _ = theano.map(lambda pix, x, y : pix[0, x-1:x+2, y-1:y+2],
        sequences=[a, b_i, c_i])                                  
                                                                  
                                                                 
    f = theano.function([a, q], d, allow_input_downcast=True)     
    return f(p, Q)                                           

# test 
p = np.arange(200).reshape((2, 1, 10, 10))
Q = np.array([[3, 4], [5, 6]])            
print p                                   
answer = example(p, Q)                                     
print answer                              
=========================================
Gives : 
[[[[  0   1   2   3   4   5   6   7   8   9]
   [ 10  11  12  13  14  15  16  17  18  19]
   [ 20  21  22  23  24  25  26  27  28  29]
   [ 30  31  32  33  34  35  36  37  38  39]
   [ 40  41  42  43  44  45  46  47  48  49]
   [ 50  51  52  53  54  55  56  57  58  59]
   [ 60  61  62  63  64  65  66  67  68  69]
   [ 70  71  72  73  74  75  76  77  78  79]
   [ 80  81  82  83  84  85  86  87  88  89]
   [ 90  91  92  93  94  95  96  97  98  99]]]


 [[[100 101 102 103 104 105 106 107 108 109]
   [110 111 112 113 114 115 116 117 118 119]
   [120 121 122 123 124 125 126 127 128 129]
   [130 131 132 133 134 135 136 137 138 139]
   [140 141 142 143 144 145 146 147 148 149]
   [150 151 152 153 154 155 156 157 158 159]
   [160 161 162 163 164 165 166 167 168 169]
   [170 171 172 173 174 175 176 177 178 179]
   [180 181 182 183 184 185 186 187 188 189]
   [190 191 192 193 194 195 196 197 198 199]]]]
[[[  23.   24.   25.]
  [  33.   34.   35.]
  [  43.   44.   45.]]

 [[ 145.  146.  147.]
  [ 155.  156.  157.]
  [ 165.  166.  167.]]]

Which is the correct output. 
However :
p = np.arange(200).reshape((2, 1, 10, 10))
Q = np.array([[3, 4], [8, 9]])            
print p                                   
answer = example5(p, Q)                   
print answer                              

crashes because the coordinate [8, 9] is near the edge of the 10x10 array 
whereas [3, 4] isn't. So the two iterations in scan give outputs of two 
different shapes. So it crashes. 
How can I solve this problem (either by zero-padding somewhere, or wrapping 
around the slice) ? I'm not too bothered about exactness, I just need a 
solution that doesn't crash.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"theano-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to