【发布时间】:2021-02-08 12:08:14
【问题描述】:
在我的课堂上,我使用了一个需要太多时间的列表理解。
class Crack:
def __init__(self, filename):
self._mesh = pyfrd.Mesh(filename)
self._filename = filename
self._node_sets = self._mesh.node_sets[1:] # list of front names
self._calc_crack_length()
@property
def nodes(self):
return self._mesh.nodes.values # return coordinates of the nodes
def _calc_crack_length(self):
"""
this method calculates the crack length for every node
Parameters
----------
Returns
-------
"""
scalc_time = time.time()
# nodes on all fronts as sets
nodes_fronts = [np.array(self.nodes[self._front_start(i) - 1 : self._front_end(i)])
for i in range(len(self._node_sets))]
print(f"t2: {time.time() - scalc_time}")
...
self._node_sets 是前面的名字列表。 _front_start 和 _front_end 都返回一个节点号(前端的第一个/最后一个节点)。
有比列表理解更好的解决方案吗?
【问题讨论】:
-
如果你有很多数据,需要很长时间。你到底想做什么?
-
在这个列表理解中,我想创建一个数组列表。每个数组都包含其前面(裂缝)节点的所有坐标。
标签: python performance numpy for-loop list-comprehension