How can I find out if a n-dimensional numpy array Arr
is contiguous in C-style or Fortran-style?
Asked
Active
Viewed 1.2k times
15

Ethunxxx
- 1,229
- 4
- 16
- 34
-
1Also look at the `strides`. – hpaulj Jul 12 '18 at 15:11
2 Answers
19
The numpy documentation states that it is possible to check whether an array is C-contiguous or Fortran-contiguous via the attribute flags
:
Arr.flags['C_CONTIGUOUS']
Arr.flags['F_CONTIGUOUS']
These attributes return a boolean indicating which of the two cases is true.
-
1Excepts it is not a function, it is actually an attribute of the `numpy.ndarray` object, as your reported syntax (which is correct) suggests. – norok2 Jul 12 '18 at 11:38
-
-
3And with some axis swapping it possible that neither will be True. And both are True for a 1d array – hpaulj Jul 12 '18 at 15:11
10
You can also try the ndarray.data.contiguous
member. E.g. (on my machine):
arr = np.arange(6).reshape(2, 3)
print(arr.data.contiguous) # True
print(arr.data.c_contiguous) # True
print(arr.data.f_contiguous) # False
(I can't find any information re: which numpy versions support this, even on their docs. Any leads welcome in the comments!)

CrepeGoat
- 2,315
- 20
- 24
-
Note: this will not work with `datetime64` arrays; you get `ValueError: cannot include dtype 'M' in a buffer` – flexatone Sep 27 '22 at 15:49