| 
    LSST Applications
    21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
    
   LSST Data Management Base Package 
   | 
 
You can use the C++ APIs to manipulate images and bits of images from python, e.g.
 sets a 4x10 portion of image im to 100 (I used im.Factory to avoid repeating afwImage.ImageF, rendering the code non-generic). I can't simply say sim = 100 as that'd make sim an integer rather than setting the pixel values to 100. I used an Image, but a Mask or a MaskedImage would work too (and I can create a sub-Exposure, although I can't assign to it).
This syntax gets boring fast.
We accordingly added some syntactic sugar at the swig level. I can write the preceeding example as:
 i.e. create a subimage and assign to it. afw's image slices are always shallow (but you can clone them as we shall see).
Note that the order is [x, y]**. This is consistent with our C++ code (e.g. it's PointI(x, y)), but different from numpy's matrix-like [row, column].
This opens up various possiblities; the following all work:
 You might expect to be able to say print im[0,20] but you won't get what you expect (it's an image, not a pixel value); say print float(im[0,20]) instead.
The one remaining thing that you can't do it make a deep copy (the left-hand-side has to pre-exist), but fortunately
works.
You will remember that the previous section used [x, y] whereas numpy uses [row, column] which is different; you have been warned.
You can achieve similar effects using numpy. For example, after creating im as above, I can use getArray to return a view of the image (i.e. the numpy object shares memory with the C++ object), so: 
 will also set a sub-image's value (but a different sub-image from im[1:5, 2:8]). You can do more complex operations using numpy syntax, e.g. 
 which is very convenient, although there's a good chance that you'll be creating temporaries the size of im.