Strides, contigüidad y memoria compartida
Una transposición cambia los strides, no el orden en memoria.
Para el arreglo contiguo np.arange(24).reshape(2, 3, 4) separado en 2 cabezas, el resultado comparte memoria con la entrada y no es C-contiguo: sus strides son (12, 2, 4, 1) elementos. np.ascontiguousarray lo compacta en una copia nueva. Una transposición no es siempre no contigua: una entrada (1, 1, 4) con una cabeza sigue siendo contigua.
En PyTorch, .permute da un tensor no contiguo. Llama a .contiguous() antes de un .view() incompatible; .reshape() copia cuando hace falta.