15

How can I find out if a n-dimensional numpy array Arr is contiguous in C-style or Fortran-style?

Ethunxxx
  • 1,229
  • 4
  • 16
  • 34

2 Answers2

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.

ractiv
  • 712
  • 8
  • 19
Ethunxxx
  • 1,229
  • 4
  • 16
  • 34
  • 1
    Excepts 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
  • @norok2, you are right! I edited the answer. Thanks! – Ethunxxx Jul 12 '18 at 11:49
  • 3
    And 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