Kann nicht Umformen numpy array
Ich habe eine Funktion, die angeblich ein 1D-array von Integer-zahlen und Formen in ein 2D-array von 1x3-arrays. Es dann angeblich jeder 1x3-array aus, und verschieben Sie Sie in einen 3x1-array. Das Ergebnis soll ein 2D-array von 3x1-arrays. Hier ist meine Funktion
def RGBtoLMS(rgbValues, rgbLength): #Method to convert from RGB to LMS
print rgbValues
lmsValues = rgbValues.reshape(-1, 3)
print lmsValues
for i in xrange(len(lmsValues)):
lmsValues[i] = lmsValues[i].reshape(3, 1)
return lmsValues
Sich das Problem erhebt sich, wenn ich versuche es zu ändern 1x3-arrays 3x1-arrays. Ich bekomme die folgende Ausgabe davon RGB-Werte = [14, 25, 19, 24, 25, 28, 58, 87, 43]
[14 25 19 ..., 58 87 43]
[[14 25 19]
[24, 25, 28]
[58 87 43]]
ValueError [on line lmsValues[i] = lmsValues[i].reshape(3, 1)]: could not broadcast input array from shape (3,1) into shape (3)
Wie kann ich diesen Fehler vermeiden?
- Wenn du sagst 2D-array von 1x3-arrays, ist es von der Form (n, n, 1, 3) ? Ein Beispiel hier könnte helfen, zu klären!
- Das Hauptproblem ist, dass jeder Eintrag von
lmsValues
hat eine festgelegte Form bereits, so ist die Zuordnung etwas zu, mit einer anderen Form ist nicht zulässig. Ich Stimme mit @AndyHayden , jedoch als ein einfaches Beispiel die Eingabe und erwartete Ausgabe wird hilfreich sein bei der Beantwortung Ihrer Frage. - Editiert, jetzt sollte es klarer sein
- Ich denke, "2D-array von 1x3 Feldern" bedeutet "2D-array mit Form
(n, 3)
". @Nick, in numpy, ein array ist nur ein einzelnes Objekt, ob 1d-oder 2d-oder nd. Für Listen, sagen wir, "Liste der Listen", wenn es '2d', aber in numpy, das ist nur ein "2d-array'. Auch, wir wissen immer noch nicht, was das gewünschte Ergebnis aussieht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits erwähnt in den Kommentaren, Sie sind wirklich immer nur das ändern eines array mit verschiedenen Formen. Es macht nicht wirklich Sinn in numpy zu sagen, dass Sie ein 2d-array von
1 x 3
arrays. Was das wirklich ist, ist eigentlich einn x 3
array.Starten wir mit einem 1d-array mit der Länge
3*n
(ich habe drei Nummern, die zu Ihrem Beispiel, um den Unterschied zwischen einem3 x n
undn x 3
array löschen):Und gestalten es zu
n x 3
:Wenn Sie möchten, dass jedes element geformt zu werden
3 x 1
, vielleicht wollen Sie nur zum transponieren des Arrays. Diese switches Zeilen und Spalten, also die Form ist3 x n
Wenn Sie wirklich wollen jedes element in
lmsValues
eine1 x 3
array, können Sie das tun, aber dann hat es ein 3d-array mit Formn x 1 x 3
:dtype=object
wo jedes element ist ein 2D-1x3-array. Diese beiden sind auf jeden Fall machbar. Aber weder das eine scheint wie alles, was die OP wäre auch wirklich wollen; ich denke, diese Antwort ist das, was er tatsächlich will, auch wenn er Sie nicht kennt.(n, 1, 1, 3)
, lol. Aber ja, meine Vermutung ist die transponierte ist, was er nach.(n, 1, 1, 3)
. Oder(1, n, 1, 3)
. Ist es unvernünftig, heben Sie die dimension oder Liste die gleiche dimension zweimal in einer Reihe? Es hängt davon ab, was Sie zu tun versuchen, und ich habe keine Ahnung, warum er sagt, er möchte ein 2D array von 1x3-arrays. (Vor allem, da ich nicht denke, dass er eigentlich will, er will ein 1D-array von 1x3-arrays, genau so, wie Sie gegeben haben ihn.)