У меня действительно большая матрица, которая просто не помещается в память.Матрица, с которой мне приходится работать, имеет 483798149136
элементов, это означает 483 миллиарда чисел с плавающей запятой.
Подход, о котором я думал, заключался в том, чтобы как-то разбить эту огромную матрицу на разные подматрицы, которые помещаются в память, выполнить объединение операций над этими подматрицами, а затем объединение их всех для восстановления исходной матрицы, которая, как мы надеемся, будет помещаться в память после всех операций объединения.
Пожалуйста, исправьте меня, если я ошибаюсь,этот подход был просто идеей, с которой я выступил, насколько хорошо или плохо, я не знаю.Если у вас есть лучшие альтернативные идеи, я открыт для любых предложений.
Код для воспроизведения этой матрицы:
a = np.arange(695556).reshape(834,834)
np.meshgrid(a,a)
Я читал это post и this post, среди прочих на этом же сайте, но ни один из них не дает истинного решения подобных проблем, они просто дают смутные предложения.
Мои вопросы сейчас:
Возможен ли мой подход к разделению и объединению или есть ли другие более эффективные способы сделать это?
Как (в терминах кода) я могу разделитьэту матрицу разбить на части (например, окна или многомерное ядро) и позже перестроить ее снова
Есть ли какой-нибудь способ обработки матрицы в кусках в numpy для выполнения операций с матричным модулем, напримерумножение, сложение и т. д. ...
Есть ли в Python специальный пакет, который помогает решать подобные задачи с матрицами
РЕДАКТИРОВАТЬ
SincЕсли некоторые пользователи спрашивают меня о цели всей этой операции, я предоставлю некоторую информацию:
Я работаю над проектом 3D-печати.В процессе есть лазерный луч, который плавит металлический порошок для создания сложных металлических деталей.В этих частях есть слои, и лазер расплавляет металл слой за слоем.
У меня есть 3 файла CSV, каждый из которых содержит матрицу 834 x 834. Первая матрица содержит значения координат оси XКогда лазерный луч проходит через слой порошка и плавит металл, вторая матрица одинакова для оси Y, а третья матрица представляет время, в течение которого лазер плавится в той же точке пикселя.Значения выражены в секундах.
Итак, у меня есть координаты лазера, проходящего через оси X и Y, и время, необходимое для плавления каждой точки.
Эта матрица получается изизображения сечений каждой изготовленной детали.
Проблема заключается в том, что температура в определенном пикселе и время, в течение которого лазер стоит на этом пикселе, могут оказывать влияние на n пикселей, когда лазер попадает туда.Итак, я хочу создать матрицу расстояний, которая скажет мне, насколько различны или похожи по евклидову расстоянию каждый пиксель изображения друг на друга.
Вот почему, если у меня есть, например, 2 834 x 834 матрицы, янеобходимо создать матрицу 695556 x 695556 с расстояниями между каждой отдельной точкой в матрице друг к другу.И именно поэтому он так велик и не умещается в памяти.
Я не знаю, дал ли я слишком много информации, или мои объяснения запутаны.Вы можете спросить все, что вам нужно, и я постараюсь прояснить это, но суть в том, что мне нужно создать эту огромную матрицу расстояний в ordr, чтобы узнать математические расстояния между пикселями, а затем узнать связь между тем, что происходит вопределенная точка изделия при печати и то, что должно произойти в других точках, чтобы избежать производственных дефектов.
Большое спасибо заранее