Considérez l'exemple simple suivant:
X = numpy.zeros([10, 4]) # 2D array x = numpy.arange(0,10) # 1D array X[:,0] = x # WORKS X[:,0:1] = x # returns ERROR: # ValueError: could not broadcast input array from shape (10) into shape (10,1) X[:,0:1] = (x.reshape(-1, 1)) # WORKS
3 Réponses :
Avez-vous vraiment besoin de pouvoir gérer les entrées 1D et 2D avec la même fonction? Si vous savez que l'entrée va être 1D, utilisez
X[:, start:end] = x
Je pense que vous avez la réponse déjà incluse dans votre question. NUMPUNE Permet aux matrices d'une dimensionnalité (tandis que Afaik Matlab préfère deux dimensions dans la mesure du possible), vous devez donc être correct avec ceci (et la distinction toujours entre (n, 1) et (n, 1)). En donnant un numéro comme l'un des indices (comme 0 en 3ème rangée), vous réduisez la dimensionnalité d'une. En donnant une gamme comme l'un des indices (comme 0: 1 à la 4ème rangée), vous ne réduisez pas la dimensionnalité. P>
La ligne 3 rend un sens parfait pour moi et j'ignais à la graphique 2-D de cette façon. P>
Voici deux astuces qui rendent le code un peu plus court.
X = numpy.zeros([10, 4]) # 2D array x = numpy.arange(0,10) # 1D array X.T[:1, :] = x X[:, 2:3] = x[:, None]
Pourriez-vous ajouter un autre commentaire? Ce n'est pas clair pour moi comment vous êtes arrivé ici du code d'origine et pourquoi cela résout le problème.