J'essaye de joindre ou de concaténer deux tableaux numpy avec des dimensions différentes. Cela n'a pas l'air bien jusqu'à présent.
Donc, à titre d'exemple,
[0,1,2].
Et j'essaye
G = [[0, 1, 2, 3],
[0, 1, 2]]
J'obtiens une erreur car a et b ne sont pas de la même dimension. La raison pour laquelle j'ai besoin de concaténer a et b est que j'essaie de résoudre un modèle de manière récursive et que l'espace d'états change avec le temps. J'ai donc besoin d'appeler la dernière fonction de valeur comme entrée pour obtenir une fonction de valeur pour la prochaine période, etc.:
for t in range(T-1,0,-1):
VG,CG = findv(VT[-1])
VT = np.append(VT,VG,axis=0)
CT = np.append(CT,CG,axis=0)
Mais, VT a une dimension différente de la période de temps à la suivante.
Est-ce que quelqu'un sait comment gérer les tableaux VT et CT numpy qui changent constamment de dimension?
OK - merci pour l'entrée ... J'ai besoin que la sortie soit de la forme suivante:
G = np.concatenate(a,b,axis=0)
Donc, si j'écris G [- 1] J'obtiendrai le dernier élément,
a = np.arange(0,4).reshape(1,4) b = np.arange(0,3).reshape(1,3)
Je ne sais pas si c'est un tableau numpy?
Merci, Jesper.
4 Réponses :
Essayez de cette façon:
import numpy as np a = np.arange(4).reshape(2,2) b = np.arange(6).reshape(2,3) c = np.arange(8).reshape(2,4) a # array([[0, 1], # [2, 3]]) b # array([[0, 1, 2], # [3, 4, 5]]) c # array([[0, 1, 2, 3], # [4, 5, 6, 7]]) np.hstack((a,b,c)) #array([[0, 1, 0, 1, 2, 0, 1, 2, 3], # [2, 3, 3, 4, 5, 4, 5, 6, 7]])
J'espère que cela vous aidera. Merci
Il vous manque une parenthèse ici.
Veuillez vous référer à la documentation concaténée ci-dessous.
https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.concatenate.html
array([[0, 1, 2, 3, 0, 1, 2]])
ok, je vois ... et si j'ai besoin que la matrice c soit [[0,1,2,3], [0,1,2]], pour que je puisse appeler c [-1] = [0, 1,2]?
Vous ne pouvez pas avoir un tableau en lambeaux
Essayez ceci et dites-moi si c'est ce que vous recherchez, définissez les tableaux sans remodeler, puis np.c _ [[a, b]]
J'ai donc écrit a = np.arange (0,4) et b = np.arange (0,3) et G_npy = np.array ([a, b]). Ce qui semble correct. Ensuite, je reçois une mise à jour que je dois ajouter au G_npy. Appelez cela c = np.arange (0,7). Comment ajouter c à la liste G_npy? Si j'écris G_npy = np.c _ [[G_npy, c]] j'obtiens quelque chose qui ne semble pas correct. J'ai besoin de G_npy = array ([[array ([0, 1, 2, 3])], [array ([0, 1, 2])], [array ([0, 1, 2, 3, 4, 5 , 6])]], dtype = objet).
Vous ne pouvez pas vraiment empiler des tableaux avec des dimensions ou des tailles de dimensions différentes.
Voici la liste (type de sortie souhaitée si je comprends bien):
temp = [i for i in G_npy] temp.append(np.arange(5)) G_npy = np.array(temp)
Transformé au tableau numpy:
G_npy = np.array([a,b])
G_npy = np.append(G_npy,None) # Allocate space for your new array
G_npy[-1] = np.arange(5) # populate the new space with new array
>>> G_npy
array([array([0, 1, 2, 3]), array([0, 1, 2]), array([0, 1, 2, 3, 4])],
dtype=object)
>>>
Solution dans votre cas (en fonction de vos besoins):
a = np.arange(0,4) b = np.arange(0,3) G_npy = np.array([a,b]) >>> G_np.shape (2,) >>> G_np array([array([0, 1, 2, 3]), array([0, 1, 2])], dtype=object) >>> G_npy[-1] array([0, 1, 2])
Modifier: En ce qui concerne votre question en commentaire
Je dois admettre que je n'ai aucune idée de comment le faire correctement.
Mais si un moyen de piratage est ok (peut-être que c'est la bonne façon), alors:
G_np = np.array(G) >>> G_np.shape (2,) >>> G_np array([list([0, 1, 2, 3]), list([0, 1, 2])], dtype=object) >>>
Ou de cette façon - mais alors, il ne sert à rien d'utiliser numpy
G = [[0, 1, 2, 3],
[0, 1, 2]]
REMARQUE:
Pour être honnête, je ne pense pas que numpy soit bon pour collecter des objets (liste comme celle-ci). Si j'étais vous, je continuerais à ajouter une vraie liste. À la fin, je le transformerais en numpy. Mais après tout, je ne connais pas votre candidature, donc je ne sais pas quelle est la meilleure attitude
cela semble beaucoup mieux ... J'ai une question cependant ... Je reçois beaucoup de mises à jour de la liste G_np ... alors disons que G_np est maintenant égal à array ([array ([0, 1, 2, 3 ]), tableau ([0, 1, 2])], dtype = objet). définissons c = np.arange (0,7) et je dois "ajouter" cela à G_np ... Je fais G_npy = np.array ([G_npy, c]). Mais maintenant, je ne peux pas identifier les éléments individuels de G_npy! G_npy [0] est array ([array ([0, 1, 2, 3]), array ([0, 1, 2])], dtype = object) dont je ne veux pas ... j'ai besoin de G_npy [0 ] = tableau [0,1,2,3]?
In [83]: cc = np.array([None])
In [84]: cc[0]= c
In [85]: cc
Out[85]: array([array([0, 1, 2, 3, 4, 5, 6])], dtype=object)
In [86]: np.concatenate((G,cc))
Out[86]:
array([array([0, 1, 2, 3]), array([0, 1, 2]),
array([0, 1, 2, 3, 4, 5, 6])], dtype=object)
np.concatenate ((a, b), axis = 0)des parenthèses supplémentaires sont crucialesnp.hstack ([a, b])Je pense que cela devrait être le long de l'axe 1 ici @MadPhysicist, étant donné la refonte
@yatu je suis d'accord, poster comme réponse
Gest une liste. Laissez-le comme ça.@terman Si l'une des réponses ci-dessous répond à votre question, à la manière dont ce site fonctionne, vous «accepteriez» la réponse, mais seulement si votre question a vraiment été répondue. Sinon, pensez à ajouter plus de détails à la question
Oui, merci @Martin. Vous avez répondu à ma question merci.
@terman J'ai seulement essayé de faire remarquer que si quelqu'un répond à votre question, le site fonctionne d'une certaine manière, que vous `` acceptez '' sa réponse en cliquant sur le symbole spécial ...