Je suis très novice en python. Je me suis demandé comment je pouvais concaténer les tableaux a et b de cette manière particulière.
J'ai essayé d'utiliser stack, vstack, hstack, concatenate et bien plus encore, mais je ne parviens toujours pas à obtenir le résultat souhaité.
a= [[ 0],
[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6]]
b= [[1,2,3],
[1,2,3],
[1,2,3],
[1,2,3],
[1,2,3],
[1,2,3],
[1,2,3]]
c = np.somefunction(a,b)
c = [
[[0],[1,2,3]],
[[1],[1,2,3]],
[[2],[1,2,3]],
[[3],[1,2,3]],
[[4],[1,2,3]],
[[5],[1,2,3]],
[[6],[1,2,3]],
]
4 Réponses :
Le problème est que vous avez un tableau irrégulier . En d'autres termes, chaque sous-liste de votre liste de listes n'a pas la même longueur, vous ne pouvez donc pas construire un tableau NumPy int régulier.
Ainsi, vous pouvez utiliser une simple compréhension de liste ou carte . Je suppose que votre a liste de listes commence par [0] et se termine par [5 :
c_arr = np.array(c) # array([[[0], [1, 2, 3]], # [[1], [1, 2, 3]], # [[2], [1, 2, 3]], # [[3], [1, 2, 3]], # [[4], [1, 2, 3]], # [[5], [1, 2, 3]]], dtype=object)
Y a-t-il une différence de vitesse si nous utilisons la façon dont je fais dans ma réponse plutôt que d'utiliser deux variables?
@Bazingaa, pas sûr. S'il y en a, c'est marginal. La complexité sera la même.
@C'est un soulagement :)
Non, cela donne ... [([0], [1, 2, 3]), ([1], [1, 2, 3]), ([2], [1, 2, 3 ]), ([3], [1, 2, 3]), ([4], [1, 2, 3]), ([5], [1, 2, 3])]
@jpp tranchant il le ferait, si l'OP ne veut pas d'index zéro.
Non, le problème est que vous avez une liste de tuples, voir les parenthèses dans mon commentaire précédent.
@jpp Ah, bonne prise, corrigé!
Vous pouvez utiliser les compréhensions de liste. L'utilisation de concatenate de NumPy ne fonctionnera pas ici en raison de l'incohérence dans les dimensions des deux tableaux. Ici, je suppose que vous voulez démarrer le tableau a à partir de 1. Sinon, vous pouvez simplement remplacer a [1:] par a .
c = [list(i) for i in zip(a[1:],b)] [[[1], [1, 2, 3]], [[2], [1, 2, 3]], [[3], [1, 2, 3]], [[4], [1, 2, 3]], [[5], [1, 2, 3]], [[6], [1, 2, 3]]]
vos tableaux ressemblent à des listes, auquel cas ce qui suit peut aider
c=[list(i) for i in zip(a,b)]
sinon s'il s'agit de tableaux numpy, ce lien peut vous aider.
Non, cela donne ... [([0], [1, 2, 3]), ([1], [1, 2, 3]), ([2], [1, 2, 3 ]), ([3], [1, 2, 3]), ([4], [1, 2, 3]), ([5], [1, 2, 3])]
Ce n'est pas le problème. Notez les parenthèses supplémentaires. Votre code donne une liste de tuples, ce qui n'est pas ce que OP veut.
J'ai modifié ma solution selon le format de sortie correct. Merci d'avoir signalé les tuples dans ma version initiale.
cne devrait-il pas commencer par[[0], [1,2,3]]?[0]est-il vraiment un élément dansa? parce que cela signifie que la fusion le jetteraitJ'ai édité le tableau
@DJosh eh bien, maintenant vous n'avez pas besoin de trancher, j'ai édité ma réponse en fonction de votre question éditée. à votre santé
Avez-vous appris quelque chose de toutes ces choses que vous avez essayées? La plupart soulèvent une erreur de forme d'incohérence. C'est une information importante.
hstacks'exécute mais produit un tableau d'entiers (7,4). Mais quel est lecsouhaité? (7,2)? mais quel dtype?