# Fully load raster into a numpy array?

if you have python-gdal bindings:

```
import numpy as np
from osgeo import gdal
ds = gdal.Open("mypic.tif")
myarray = np.array(ds.GetRasterBand(1).ReadAsArray())
```

And you're done:

```
myarray.shape
(2610,4583)
myarray.size
11961630
myarray
array([[ nan, nan, nan, ..., 0.38068664,
0.37952521, 0.14506227],
[ nan, nan, nan, ..., 0.39791253,
nan, nan],
[ nan, nan, nan, ..., nan,
nan, nan],
...,
[ 0.33243281, 0.33221543, 0.33273876, ..., nan,
nan, nan],
[ 0.33308044, 0.3337177 , 0.33416209, ..., nan,
nan, nan],
[ 0.09213851, 0.09242494, 0.09267616, ..., nan,
nan, nan]], dtype=float32)
```

You can use **rasterio** to interface with NumPy arrays. To read a raster to an array:

```
import rasterio
with rasterio.open('/path/to/raster.tif', 'r') as ds:
arr = ds.read() # read all raster values
print(arr.shape) # this is a 3D numpy array, with dimensions [band, row, col]
```

This will read everything into a 3D numpy array `arr`

, with dimensions `[band, row, col]`

.

Here is an advanced example to read, edit a pixel, then save it back to the raster:

```
with rasterio.open('/path/to/raster.tif', 'r+') as ds:
arr = ds.read() # read all raster values
arr[0, 10, 20] = 3 # change a pixel value on band 1, row 11, column 21
ds.write(arr)
```

The raster will be written and closed at the end of the "with" statement.

Granted I'm reading a plain old png image, but this works using scipy (`imsave`

uses PIL though):

```
>>> import scipy
>>> import numpy
>>> img = scipy.misc.imread("/home/chad/logo.png")
>>> img.shape
(81, 90, 4)
>>> array = numpy.array(img)
>>> len(array)
81
>>> scipy.misc.imsave('/home/chad/logo.png', array)
```

My resultant png is also 81 x 90 pixels.