对于我的关于有限元分析的输入数据的小型数据挖掘项目,我已将 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
,最好是在一个 numpy 数组中,以及数据。
由于表格很长(~3Mio.Lines),我正在寻找一种有效的算法来计算每个元素的角坐标的平均值。
到目前为止,我的计划是通过以下方式更新 numpy 数组的第 i 个元素:
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
不幸的是,这有几个问题:
- 很慢
- 我需要知道元素的最高和最低 id(例如,当我只选择一个子集时)
[0.,0.,0.,0.]
如果 id 范围有间隙,我会得到线条。(例如,当我有 element_ids 2、4、7 时......)
是否有任何快速灵活的方法可以做到这一点,也许已经存在 numpy 函数?什么是好的数据类型开始?直接在 PostgreSQL 中这样做更好吗?
提前致谢。