web-dev-qa-db-fra.com

erreur de concaténation des tableaux numpy: les tableaux 0-d ne peuvent pas être concaténés

J'essaye de concaténer deux tableaux numpy, mais j'ai eu cette erreur. Quelqu'un pourrait-il me donner un indice sur ce que cela signifie réellement?

    Import numpy as np
    allValues = np.arange(-1, 1, 0.5)
    tmp = np.concatenate(allValues, np.array([30], float))

Puis j'ai eu 

ValueError: 0-d arrays can't be concatenated

Si je fais

    tmp = np.concatenate(allValues, np.array([50], float))

Il n'y a pas de message d'erreur mais la variable tmp ne reflète pas non plus la concaténation.

13
Bin Zhou

Vous devez placer les tableaux que vous souhaitez concaténer dans une séquence (généralement un tuple ou une liste) dans l'argument.

tmp = np.concatenate((allValues, np.array([30], float)))
tmp = np.concatenate([allValues, np.array([30], float)])

Vérifiez la documentation pour np.concatenate. Notez que le premier argument est une séquence (liste, tuple, par exemple) de tableaux. Not ne les prend pas comme arguments séparés.

Autant que je sache, cette API est partagée par toutes les fonctions de concaténation de numpy: concatenate , hstack , vstack , dstack et column_stack prennent tous seul argument principal qui devrait être une séquence de tableaux.


Cette erreur s’explique par le fait que les tableaux sont également des séquences. Mais cela signifie que concatenate interprète allValues comme une séquence de tableaux à concaténer. Cependant, chaque élément de allValues est un float plutôt qu'un tableau et est donc interprété comme un tableau de dimension zéro. Comme le dit l'erreur, ces "tableaux" ne peuvent pas être concaténés.

Le deuxième argument est considéré comme le deuxième argument (facultatif) de concatenate, qui est l'axe sur lequel concaténer. Cela ne fonctionne que parce qu'il n'y a qu'un seul élément dans le deuxième argument, qui peut être converti en un entier et constitue donc une valeur valide. Si vous aviez mis un tableau avec plus d'éléments dans le deuxième argument, vous auriez obtenu une erreur différente:

a = np.array([1, 2])
b = np.array([3, 4])
np.concatenate(a, b)

# TypeError: only length-1 arrays can be converted to Python scalars
12
Roger Fan

Assurez-vous également de concaténer deux tableaux numpy. Je concaténais un tableau python avec un tableau numpy et cela me donnait la même erreur:

ValueError: 0-d arrays can't be concatenated

Il m'a fallu un certain temps pour comprendre cela, car toutes les réponses dans stackoverflow supposaient que vous disposiez de deux tableaux numpy .. Une erreur assez ridicule, mais facilement oubliée. D'où poster juste au cas où cela pourrait aider quelqu'un.

Voici les liens pour convertir un tableau python existant en utilisant np.asarray Ou créer des tableaux np , si cela vous aide.

9
mithunpaul

Une autre façon d’obtenir cette erreur est d’avoir deux objets numpy de types ... différents? 

J'ai cette erreur quand j'essaie np.concatenate([A,B]) 

et ValueError: all the input arrays must have same number of dimensions quand je lance np.concatenate([B,A])

Comme @mithunpaul l'a mentionné, mes types sont désactivés: A est un tableau de 44279x204 et B est un <44279x12 sparse matrix of type '<class 'numpy.float64'>' with 88558 stored elements in Compressed Sparse Row format>) 

C'est pourquoi l'erreur se produit. Je ne sais pas encore comment le résoudre.

0
kchalk