@jni Then I think we should raise an error if multichannel is set incorrectly.

Memoryviews are just like numpy arrays, the syntax is just much cleaner:

```
double[:, ::1] my_array_c_contiguous
double[::1, ::] my_array_f_contiguous
double[:, :] x = np.zeros((10, 10), dtype=double)

a, b = x.shape
etc.
```

But it also handles slices efficiently.