184 votes

Des réseaux ND aux réseaux 1D

Disons que j'ai un tableau a :

a = np.array([[1,2,3], [4,5,6]])

array([[1, 2, 3],
       [4, 5, 6]])

Je voudrais le convertir en un tableau 1D (c'est-à-dire un vecteur colonne) :

b = np.reshape(a, (1,np.product(a.shape)))

mais cela renvoie

array([[1, 2, 3, 4, 5, 6]])

ce qui n'est pas la même chose que :

array([1, 2, 3, 4, 5, 6])

Je peux prendre le premier élément de ce tableau pour le convertir manuellement en un tableau 1D :

b = np.reshape(a, (1,np.product(a.shape)))[0]

mais cela nécessite de connaître le nombre de dimensions du tableau d'origine (et de concaténer les [0] lorsque l'on travaille avec des dimensions supérieures).

Existe-t-il un moyen indépendant des dimensions d'obtenir un vecteur colonne/ligne à partir d'un ndarray arbitraire ?

0voto

xcellsior Points 11

Bien que cela n'utilise pas le format de tableau np, (trop paresseux pour modifier mon code) cela devrait faire ce que vous voulez... Si vous voulez vraiment un vecteur colonne, vous devrez transposer le résultat du vecteur. Tout dépend de l'utilisation que vous comptez en faire.

def getVector(data_array,col):
    vector = []
    imax = len(data_array)
    for i in range(imax):
        vector.append(data_array[i][col])
    return ( vector )
a = ([1,2,3], [4,5,6])
b = getVector(a,1)
print(b)

Out>[2,5]

Donc si vous avez besoin de transposer, vous pouvez faire quelque chose comme ça :

def transposeArray(data_array):
    # need to test if this is a 1D array 
    # can't do a len(data_array[0]) if it's 1D
    two_d = True
    if isinstance(data_array[0], list):
        dimx = len(data_array[0])
    else:
        dimx = 1
        two_d = False
    dimy = len(data_array)
    # init output transposed array
    data_array_t = [[0 for row in range(dimx)] for col in range(dimy)]
    # fill output transposed array
    for i in range(dimx):
        for j in range(dimy):
            if two_d:
                data_array_t[j][i] = data_array[i][j]
            else:
                data_array_t[j][i] = data_array[j]
    return data_array_t

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X