saveData = {
"xyStep": xyStep,
"xRange": xRange,
"yRange": yRange,
"zRange": zRange,
"zBase": zBase,
"data": [[0] * ceil(xRange/xyStep) for i in range(ceil(yRange/xyStep))],
}
measurements = 1
pos = microscope.position
print("Current position: " + json.dumps(pos))
starting_pos = microscope.position
ix = 0
iy = 0
totalElapsed = 0
stepsTaken = 1
maxSteps = (xRange/xyStep) * (yRange/xyStep)
up = True
ix = 0
for x in range(-micronToStep(xRange/2), micronToStep(xRange/2) - micronToStep(xyStep), micronToStep(xyStep)):
iy = 0
for y in range(-micronToStep(yRange/2), micronToStep(yRange/2) - micronToStep(xyStep), micronToStep(xyStep)):
start = timer()
values = []
if (up):
pos = {}
pos['x'] = x # declination
pos['y'] = y # declination
pos['z'] = zBase - micronToStep(zRange/2)
pos['z2'] = zBase + micronToStep(zRange/2)
print("Scanning up to position:", pos)
values = microscope.measureZ(microscope, pos)
values = np.asarray(values)
thisTime = timer() - start
totalElapsed += thisTime
up = False
else:
pos = {}
pos['x'] = x # declination
pos['y'] = y # declination
pos['z'] = zBase + micronToStep(zRange/2)
pos['z2'] = zBase - micronToStep(zRange/2)
print("Scanning to position:", pos)
values = microscope.measureZ(microscope, pos)
values = np.asarray(values)
values = np.flip(values)
thisTime = timer() - start
totalElapsed += thisTime
up = True
print(pos)
saveData['data'][ix][iy] = values
iy += 1
timeLeft = (maxSteps - stepsTaken) * (totalElapsed / stepsTaken) / 60 / 60
print(">>>>>>>>>>>> Estimated time left: [" + str(timeLeft) + "hr], Per Scan: [" + str(totalElapsed / stepsTaken) + "s][" + str(thisTime) + "], Total Elapsed: [" + str(totalElapsed) + "s], Scans taken: [" + str(stepsTaken) + "] out of: [" + str(maxSteps) + "]")
stepsTaken += 1
pickle.dump(saveData, open('saveData.bin', 'wb'))
ix += 1
pickle.dump(saveData, open('saveData.bin', 'wb'))
Во время выполнения выходной файл достигает около 4 ГБ, по мере роста файла скорость записи падает.
Я использую в другом приложении файл saveData.bin, поэтому мне хотелось сохранить ту же внутреннюю структуру данных в файле.
Проблема в том, что приведенный выше код каждый раз записывает весь файл целиком, а не просто добавляет новейшие данные в конец.
Я читал о многих вариантах и Мне интересно, является ли np.memmap оптимальным решением моей проблемы. Буду очень признателен за показ правильной реализации решения. Проблема в том, что np.memmap требует всех диапазонов, но один из моих диапазонов зависит от «данных», как вы могли видеть в приведенном выше коде.
Изменить: ниже я прикрепляю код второй программы, которая загружает файл saveData.bin, написанный первой программой. Вот код:
У меня есть код: [code]saveData = { "xyStep": xyStep, "xRange": xRange, "yRange": yRange, "zRange": zRange, "zBase": zBase, "data": [[0] * ceil(xRange/xyStep) for i in range(ceil(yRange/xyStep))], }
ix = 0 for x in range(-micronToStep(xRange/2), micronToStep(xRange/2) - micronToStep(xyStep), micronToStep(xyStep)): iy = 0 for y in range(-micronToStep(yRange/2), micronToStep(yRange/2) - micronToStep(xyStep), micronToStep(xyStep)): start = timer() values = [] if (up): pos = {} pos['x'] = x # declination pos['y'] = y # declination pos['z'] = zBase - micronToStep(zRange/2) pos['z2'] = zBase + micronToStep(zRange/2) print("Scanning up to position:", pos)
pickle.dump(saveData, open('saveData.bin', 'wb')) [/code] Во время выполнения выходной файл достигает около 4 ГБ, по мере роста файла скорость записи падает. Я использую в другом приложении файл saveData.bin, поэтому мне хотелось сохранить ту же внутреннюю структуру данных в файле. Проблема в том, что приведенный выше код каждый раз записывает весь файл целиком, а не просто добавляет новейшие данные в конец. Я читал о многих вариантах и Мне интересно, является ли np.memmap оптимальным решением моей проблемы. Буду очень признателен за показ правильной реализации решения. Проблема в том, что np.memmap требует всех диапазонов, но один из моих диапазонов зависит от «данных», как вы могли видеть в приведенном выше коде. Изменить: ниже я прикрепляю код второй программы, которая загружает файл saveData.bin, написанный первой программой. Вот код: [code]import matplotlib.pyplot as plt import numpy as np import time from PIL import Image import math import numpy as np import json import pickle import matplotlib.cm as cm import PIL.ImageOps import tifffile