Ich habe eine sehr große 6D-Array als (225, 97, 225, 32, 32, 32)
. Ich möchte es in 4D Array wie (225*97*225, 32, 32, 32)
umformen. Ich habe versucht, Python 2.7 in Ubuntu 14.04 mit dem folgenden Code zu verwenden, aber ich habe den Speicherfehler. Wie könnte ich es lösen?Wie ein großes Array neu zu gestalten (Memory Error)
import numpy as np
#input_6D shape (225, 97, 225, 32, 32, 32)
input_4D= input_6D.reshape(input_6D.shape[0]*input_6D.shape[1]*input_6D.shape[2], input_6D[0],input_6D[1],input_6D[2])
Der Fehler ist
input_4D = input_6D.reshape (input_6D.shape [0] * input_6D.shape [1] * input_6D.shape [2], input_6D [0], input_6D [1], input_6D [2]) MemoryError
Dies ist Schritt, was ich getan habe. Zuerst lade ich einen 3D-Eingang mit Shape 256x128x256
. Dann habe ich den Code unten 6D Array als (225, 97, 225, 32, 32, 32)
zu bekommen, wo Patch Form ist 32, 32, 32
def patch_extract_3D(input,patch_shape):
patches_6D = np.lib.stride_tricks.as_strided(input, ((input.shape[0] - patch_shape[0] + 1) // xstep, (input.shape[1] - patch_shape[1] + 1) // ystep,
(input.shape[2] - patch_shape[2] + 1) // zstep, patch_shape[0], patch_shape[1], patch_shape[2]),
(input.strides[0] * xstep, input.strides[1] * ystep,input.strides[2] * zstep, input.strides[0], input.strides[1],input.strides[2]))
Bei dieser riesigen Datenmenge müssen Sie sie wahrscheinlich zuerst auf die Festplatte (Datei oder Datenbank) ausgeben und erneut lesen. –
Haben Sie eine Lösung per Code zur Verfügung gestellt? Leider habe ich Ihre Lösung nicht vollständig erfasst. – user3051460
Sind Sie sicher, dass Sie den gleichen Befehl ausführen, den Sie in der Frage angezeigt haben? Denn für mein Auge sieht es so aus, als käme man mit diesem Befehl nicht so weit wie MemoryError. Sie sollten etwas wie "nur Länge-1-Arrays können in Python-Skalare umgewandelt werden", weil Sie als Argumente umformen Dinge wie "input_6D [0]", die nicht Zahlen, sondern riesige Arrays selbst sind. – avysk