J'ai réussi à construire une matrice avec ce morceau de code
array([[ 1., 1.],
[ 2., 1.],
[ 3., 2.],
[nan, 2.]])
qui donne
c_bed = np.append(np.array([1, 2, 3]), np.nan).reshape(4, 1) c_bath = np.array([1, 1, 2, 2], dtype=np.float).reshape(4, 1) ds = np.append(c_bed, c_bath, axis=1)
la sortie est exactement ce que je voulez cependant, je me demande s'il existe une meilleure façon de construire cette matrice?
4 Réponses :
Que diriez-vous d'utiliser zip_longest
from itertools import zip_longest
np.array(list(zip_longest([1,2,3],[1,1,2,2],fillvalue=np.nan)))
Out[228]:
array([[ 1., 1.],
[ 2., 1.],
[ 3., 2.],
[nan, 2.]])
Définissez fillvalue = np.nan et vous obtenez un tableau numérique.
np.array (list (zip_longest ([1,2,3], [1,1,2,2])), 'd') fonctionne également.
Y a-t-il une raison de ne pas utiliser ce matrix = numpy.array ([[1, 1], [2, 1], [3, 2], [numpy.nan, 2]]) code>?
Je pense que l'hypothèse est que les listes originales sont des données entrantes
Je suis heureux de mettre à jour ma réponse si le PO démontre que c'est le cas.
J'étais heureux de voter pour cela tel quel. C'est la meilleure réponse à la question telle qu'elle est.
Si vous avez
ds = np.full((max(map(len, data)), 2), np.nan) ds[:len(beds), 0] = beds ds[:len(baths), 1] = baths
Vous pouvez faire comme suit:
beds = [1, 2, 3] baths = [1, 1, 2, 2] data = (beds, baths)
Avertissement: la méthode suivante est peut-être la plus courte, mais ce n'est certainement pas la plus saine. Je ne l'utiliserais pas dans le code de production.
np.c_[[2,4,6,np.nan],2:6]//2 # array([[ 1., 1.], # [ 2., 1.], # [ 3., 2.], # [nan, 2.]])