Для моего небольшого проекта по интеллектуальному анализу входных данных для анализа методом конечных элементов я экспортировал результат SQL-запроса в длинный список углов элементов (треугольников и т. Д.) На языке Python.Вот некоторые примеры данных:
import numpy as np
#element_id, coordinates, data
corners = [(1, [-7.374797, -885.3285, 33.665], 1.0),
(1, [-427.427897, -965.4985, 596.2296], 1.0),
(1, [-81.743197, -126.5385, 286.8912], 1.0),
(2, [-22.248597, -878.7285, 111.239], 0.35),
(1, [-74.307097, -126.5385, 272.1152], 1.0),
(2, [-74.307097, -126.5385, 286.8912], 0.35),
(2, [-81.743197, -126.5385, 286.8912], 0.35),
(3, [0.062103, -562.0245, 81.687], 1.25)]
Где первое значение в каждом кортеже в списке - это id
элемента, а второе значение - координаты угла.Для дальнейшей обработки мне нужен центр каждого element
, предпочтительно в массиве пустышек, вместе с данными.
Поскольку таблица довольно длинная (~ 3 млн. Строк), я ищу эффективныйАлгоритм вычисления среднего значения координат углов для каждого элемента.
До сих пор я планировал обновить i-й элемент массива numpy следующим образом:
x = np.zeros((3,4)) #initialize array
for c in corners:
x[c[0],1:] = (x[c[0],0]*x[c[0],1:] + c[1])/(x[c[0],0]+1) #recursive formula for mean
x[c[0],0] +=1
К сожалению, с этим связано несколько проблем:
- Это медленно
- Мне нужно знать самый высокий и самый низкий идентификатор (например, когда я выбираю только подмножество) элементов
- Я получаю
[0.,0.,0.,0.]
строк, если диапазон идентификаторов имеетпробел. (например, когда у меня есть element_ids 2,4,7 ...)
Есть ли быстрый и гибкий способ сделать это, возможно, с уже существующими функциями numpy?Какие бы хорошие типы данных для начала?Это лучше сделать прямо в PostgreSQL?
Заранее спасибо.