Je suis en train d'interfacer une bibliothèque C avec python. J'ai des tableaux en numpy que je passe à la bibliothèque en utilisant l'attribut ctypes
du tableau.Application de la transposition en mémoire d'un tableau numpy
À un certain point, j'ai besoin de fournir un tableau à la bibliothèque C, qui devrait être la transposée du tableau numpy a
que j'ai. (Une autre façon de le dire est que la bibliothèque C n'accepte pas une foulée pour la dimension la plus interne). Cependant, quand je passe a.T
au lieu de a
, rien ne se passe.
En effet, il semble que numpy fait une sorte de transposition paresseuse en échangeant simplement les progrès:
import ctypes
import numpy as np
a = np.zeros((2, 3))
a.ctypes.strides_as(ctypes.c_longlong)[:]
# returns [24, 8]
a.T.ctypes.strides_as(ctypes.c_longlong)[:]
# return [8, 24]
Ma question est, comment appliquer cette transposition se produire en mémoire?
EDIT
je remarquai que
a.T + np.zeros(a.T.shape)
réordonne la mémoire comme je veux, mais s'il y a une solution plus élégante et explicite, je voudrais encore entendre.
(Aussi, il est intéressant,
a.T + np.zeros_like(a.T)
semble pas mémoire de renumérotation).
Avez-vous essayé [np.transpose] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html)? –
Oui - même chose. – user1735003