gpt4 book ai didi

python - 使用 numpy 来操作纯 python 列表

转载 作者:太空宇宙 更新时间:2023-11-04 09:06:04 25 4
gpt4 key购买 nike

我有几个纯 python 代码部分,例如:

[final_ids.append(list_item[0]) for list_item in newNodesCoord]
for line in nodes:
if line[0] not in final_ids:
newNodesCoord.append([line[0], 0., 0., 0.])

for i,row in enumerate(deformedCoord):
x,y,z,nx,ny=row
for j, line in enumerate(nodesL):
nodeID,x2,y2,z2=line
if x==x2 and y==y2 and z==z2:
newNodesCoord.append([nodeID, nx, ny, 0.])

然而,随着列表大小的增加,代码的性能会下降。使用 numpy 有更快的方法吗?谢谢!

最佳答案

NumPy 数组不是最好的数据结构。当您可以在一个漂亮的大数组上调用 NumPy 函数时,NumPy 数组会大放异彩(性能方面)。当您需要逐项或逐行遍历数组时,它们的表现并不是特别好,而这似乎是您在代码中所做的。


这里有一些其他的建议:

线

line[0] not in final_ids:

可以通过将 final_ids 设为 set 而不是 list 来加快速度。 Testing membership in a set is O(1) ,同时测试列表中的成员资格是 O(n)


同样,使 nodesL 成为 dict 映射 (x,y,z)nodeID 值。然后你可以使用:

for x, y, z, nx, ny in deformedCoord:
if (x,y,z) in nodesL:
nodeID = nodesL[x,y,z]
newNodesCoord.append([nodeID, nx, ny, 0.])

如果对于每个 (x,y,z) 有多个 nodeID 添加:

for nid in nodeID:
newNodesCoord.append([nid, nx, ny, 0.])

newNodesCoord.extend([[nid, nx, ny, 0.] for nid in nodeID])

你的双 for-loop 具有时间复杂度 O(n*m) 其中 n = len(deformedCoord)m = len(nodesL)。如果您将 nodesL 设为 dict,则 if (x,y,z) in nodesLO(1),所以上面的循环在 O(n) 时间内运行。

关于python - 使用 numpy 来操作纯 python 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20775633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com